Оптимальное количество потоков при отключенной гиперпоточности

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

Итак, допустим, у меня есть компьютер с отключенной гиперпоточностью.

Какое оптимальное количество потоков я должен использовать в написанной мной программе?

Я понимаю, что если моя программа НЕ на 100% связана с процессором (имеет дело с IO), то оптимальное количество потоков будет БОЛЕЕ больше, чем один поток на ядро ​​- поскольку у меня будет несколько потоков, которые ожидают и имеют больше (не слишком много) из-за переключения контекста) будет лучше для таких программ.

НО, в случае, если моя программа на 100% связана с процессором - один поток на ядро ​​является оптимальным? Я в замешательстве, поскольку имею больше потоков, то есть, возможно, получаю больше времени для каждого потока, что может улучшить производительность.

Спасибо!

1 ответ

При чисто нагрузке на процессор без гиперпоточности ответ всегда равен 1 потоку на ядро.

При включенном HT может быть меньше одного потока на ядро ​​HT, потому что потоки борются за один и тот же кеш. Но обычно даже здесь один поток на ядро ​​HT является лучшим.

С рабочими нагрузками ввода-вывода это намного сложнее, но здесь это не применимо.

так как имеет больше потоков, то есть, возможно, получить большее время среза для каждого потока

Не уверен, что я следую рассуждениям. ОС будет раздавать временные срезы потокам примерно в циклическом порядке. Срезы времени составляют 4-40 мс, и их размер не изменяется в зависимости от количества потоков.

В идеале, когда количество потоков точно правильное, нет никаких контекстных переключателей, о которых можно было бы говорить. Чем больше потоков вы добавите, тем больше переключений контекста.

Другие вопросы по тегам