Имеется двухъядерный процессор с поддержкой HT (итого 4 лог. ядра). Нужно выполнить одни и те же операции над большим объемом массивов данных. Каково максимальное эффективное количество потоков в данном случае, и нужно ли учитывать поток супервизора?
KeSqueer Запросы к диску/устройствам есть? если да то 5 потоков, если нет то 4. Хотя что мешает провести эксперимент не понятно...
Возможно больше надо будет. Как-то давно надо было подобрать оптимальное количество потоков для PHP на 8(4х2) ядерном сервере - в той конфигурации оказалось, что надо ровно 15 потоков, при 16 или 14 потоках "скорость"(количество обработанных соединений) была на примерно 10% ниже чем при 15 )) Вобщем мне кажется только эксперимент покажет нужную цифру. П.С. Если речь идёт об обработке массива в памяти и полном отсутствии запросов куда бы то ни было - то ответ явно будет - 4.
Задача - многопоточная распаковка архива. Но количество потоков должно определяться "на месте", ведь процессор может быть и иной. Где-то читал, что при HT двумя лог. ядрами используется один кеш, не снизит ли это производительность? Ведь при смене потока данные в кеше будут меняться. Ясно, что общий прирост производительности будет минимален в любом случае (из-за файлового ввода-вывода), но задача скорее академическая, чем практическая.
Прочитал Cache Blocking Technique on Hyper-Threading Technology Enabled Processors. Вывод такой: при использовании HT нужно соблюдать условия на объем обрабатываемых блоков данных - он должен быть либо меньше половины, либо больше целого объёма кеша. Иначе наблюдается спад производительности по сравнению с аналогичным процессором без поддержки HT. Это вызвано частыми кеш-промахами при объеме блока данных 0,5...1,00 объема кеша, что и понятно - кеш у двух логических ядер общий. Теперь дело за экспериментом. Правильно ли я понимаю, что распараллеливать файловый ввод-вывод нет смысла, ибо доступ к ЖД эксклюзивный?