Обновить

Множество Мандельброта — объемная картина? Выпуклая? И почему из 120 картин кажутся только две?

Уровень сложностиСредний
Время на прочтение26 мин
Охват и читатели5.7K
Всего голосов 2: ↑1 и ↓10
Комментарии9

Комментарии 9

Кажется ли вам что объемная картина?

Мне кажется, что в ней есть движение :-) Особенно если при взгляде на неё двигать глазами в разные стороны.

почему так мало знают о множество Мандельброта?

Как минимум 6 статей про это есть на Хабре:

Множество Мандельброта / Хабр

https://habr.com/ru/companies/ddosguard/articles/881360/

https://habr.com/ru/articles/525982/

https://habr.com/ru/companies/skillfactory/articles/509542/

https://habr.com/ru/companies/sberbank/articles/957194/

Мандельброт для детей / Хабр

Первая - Ваша же, но тем не менее. Материалы на эту тему есть, и немало. А если запустить поиск, их найдётся ещё больше.

Вот полный код на языке С++:

Во-первых, хорошим тоном считается либо выкладывание кода в какой-нибудь репозиторий, либо его можно хотя бы под спойлер убрать. Во-вторых, вижу, что теперь код у Вас даже как-то отформатирован, но не весь. Почему бы весь его не отформатировать? Это облегчает чтение на порядок.

#include <gmp.h>

#include <mpfr.h>

Неплохо бы для сторонних библиотек указывать, откуда их брать. Иначе программа просто не скопмилируется.

"Во-первых, хорошим тоном считается хотя бы под спойлер убрать" - я сделал!

Вы абсолютно правы, спасибо за точное замечание! Библиотеки длинной арифметики GNU MPFR и GNU GMP не входят в стандартный комплект компилятора, и перед запуском команды сборки их действительно нужно установить в систему.

Чтобы у всех всё компилировалось без проблем, вот команды для их установки:

  • Для Windows (в среде MSYS2 / UCRT64):
    pacman -S mingw-w64-ucrt-x86_64-mpfr mingw-w64-ucrt-x86_64-gmp

  • Для Linux (Ubuntu / Debian):
    sudo apt-get install libmpfr-dev libgmp-dev

После этого указанная в статье команда g++ отработает идеально!

"Весь его отформатировать? Это облегчает чтение на порядок." - я тоже сделал!!! Ура!

обеспечивая безупречную 100%-ю загрузку процессора как на 4-ядерном ноутбуке, так и на 128-ядерном высокопроизводительном сервере

Программа реально умеет порождать 128 потоков на 128-ядерном сервере?

Да, программа абсолютно честно и гарантированно умеет порождать хоть 128, хоть 256 потоков на многоядерных серверах. И делает она это автоматически, «из коробки», без какого-либо хардкода.

В коде, который мы с вами отформатировали, количество рабочих потоков вычисляется вот этой строчкой:

unsigned int numThreads = std::thread::hardware_concurrency();
if (numThreads == 0) numThreads = 4;

Функция стандартной библиотеки C++ std::thread::hardware_concurrency() делает системный вызов к операционной системе и возвращает точное количество доступных логических ядер (включая Hyper-Threading). На 128-ядерном сервере (например, на двухпроцессорном AMD EPYC) она вернет ровно 128 (или 256, если включен SMT).

Затем в цикле инициализации:

for (unsigned int t = 0; t < numThreads; ++t) {    
renderWorkers.emplace_back([&]() { ... });
}

Движок создает ровно numThreads (то есть 128) независимых операционных потоков ОС.

if (numThreads == 0) numThreads = 4; — это обычная подстраховка (fallback). Если система вернула ноль (по какой-то причине не смогла определить число ядер), код принудительно назначает 4 потока, чтобы программа просто не упала и запустилась хотя бы в 4 потока.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации