Интеллектуальная интенсивность потоков - PullRequest
4 голосов
/ 03 июня 2011

Я хочу запустить пакет, скажем, 20 ресурсоемких ЦП (в основном очень длинных для цикла) на машине.

Каждое из этих 20 заданий не делится данными с другими 19.

Если на машине установлено N ядер, тогда мне следует выделить N-1 из этих заданий?Или N?Или мне просто запустить все 20 и заставить Windows выяснить, как их планировать?

Ответы [ 3 ]

5 голосов
/ 03 июня 2011

К сожалению, нет простого ответа.Единственный способ узнать наверняка - это внедрить и затем профилировать ваше приложение.

Как правило, для максимальной пропускной способности, если задания выполняются исключительно с использованием ЦП, вам нужно по одному на ядро.В зависимости от типа работы, это может включать один код на гиперпотоки или только один на «истинное физическое ядро».(Если работа идентична для всех 20 заданий, то гиперпоточность часто замедляет общую работу ...)

Если задания имеют любую не-CPU функциональность (например, чтение файла, ожидание чего угодно и т. д.), то> 1 рабочий элемент на ядро ​​имеет тенденцию быть намного лучше.Во многих ситуациях это улучшится.

3 голосов
/ 03 июня 2011

Как правило, если вы не обмениваетесь данными, не блокируете ввод-вывод и не используете много ЦП, и больше ничего не выполняется на коробке (и, возможно, еще несколько предупреждений), используя все ЦП (например, N потоков), вероятнолучшая идея.

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

2 голосов
/ 03 июня 2011

Вы должны использовать какой-то пул потоков, так что (разумно) легко настроить количество потоков, не влияя на структуру программы.

Как только вы это сделаете, это довольно простовопрос тестирования, чтобы найти разумно оптимальное количество потоков относительно количества доступных процессоров.Скорее всего, даже когда / если они выглядят так, как будто они связаны исключительно с процессором, вы получите лучшую эффективность с числом потоков> N, но единственный способ убедиться в этом - это проверить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...