Я только начал программировать с потоками POSIX в двухъядерной системе x86_64 Linux. Кажется, что 256 потоков - это почти оптимальная производительность, как я это сделал. Мне интересно, как это может быть? И может ли это означать, что мой подход неверен и лучший подход потребует гораздо меньшего количества потоков и будет таким же быстрым или быстрым?
Для получения дополнительной информации (рассматриваемая программа является каркасом для многопоточного генератора изображений с М-набором), см. Следующие вопросы, которые я уже задавал:
Используя потоки, как мне поступить с тем, что в идеале должно происходить в последовательном порядке?
Как мое приложение для создания потоковых изображений может передавать данные в графический интерфейс?
Возможно, я должен упомянуть, что скелет (в котором я воспроизвел минимальную функциональность для тестирования и сравнения) теперь отображает изображение, и фактические вычисления выполняются почти в два раза быстрее, чем в непотоковой программе.
Таким образом, если 256 потоков, работающих быстрее, чем 8 потоков, не свидетельствуют о плохом подходе к созданию потоков, почему 256 потоков превосходят 8 потоков?
Тест для проверки скорости является частью набора Мандельброта , расположенного по адресу:
xmin -0.76243636067708333333333328
xmax -0.7624335575810185185185186
ymax 0.077996663411458333333333929
рассчитано максимум до 30000 итераций.
В версии без потоков время рендеринга в моей системе составляет около 15 секунд. В многопоточной версии средняя скорость для 8 потоков составляет 7,8 секунды, а для 256 потоков - 7,6 секунды.