Оптимальное количество потоков для использования - PullRequest
1 голос
/ 09 июня 2011

Хорошо, я решаю очень сложную проблему.- генерирование простых чисел (это не совсем смущающе параллельно, поскольку они пишутся (и читаются из них для проверки, являются ли они фактором) из общего источника. для интереса: http://pastebin.com/sQQLpMgB

В любом случае, вещь, котораяЭто вдохновило меня на то, чтобы написать (частично) реализацию моего доступа к этим двойным процессорам Xeon E5520 (с объемом оперативной памяти IIRC 16 ГБ)

Так что я знаю, что каждый процессор поддерживает 8активные потоки. Но затем есть фоновые процессы (и, вероятно, другие пользователи), использующие некоторые из них (на самом деле, вероятно, больше, чем все из них). Так что хорошее эмпирическое правило относительно того, сколько потоков заставляет вещи идти быстрее, прежде чемих сдерживает их над головой (думаю, это правило должно учитывать количество потоков, которые могут быть активны одновременно)

Ответы [ 2 ]

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

Нет такого правила. Это будет зависеть от многих факторов, в частности, от того, привязано ли ваше приложение к вводу / выводу (похоже, что ваше нет). Нужно задать параметры числа потоков, чтобы его можно было указать из файла конфигурации или из командной строки, а затем поиграть с этим числом, пока вы не достигнете нужного места для вашей конкретной проблемы и конфигурации.

1 голос
/ 09 июня 2011

Если операция в основном связана с процессором (не ожидая операций ввода-вывода), то первое правильное предположение - 1: 1 с количеством логических ядер ЦП.Учитывая, что генерация простых чисел в основном связана с процессором и что в вашем распоряжении будет 16 логических ядер, я бы запустил с 16 потоками.Сделайте несколько тестов и посмотрите, что произойдет.Я ожидаю, что производительность достигнет пика около 16 потоков, но это действительно зависит от того, сколько ввода / вывода происходит для хранения сгенерированных простых чисел.

...