Итак, я пытался найти этот ответ в Google, но не могу найти прямой технический ответ на вопрос. (Или, если это так, это было сбивающим с толку образом)

Итак, скажем, у вас есть программа / игра, которая использует 2 потока и только 2 потока. С четырехъядерным процессором и гиперпоточностью, будет ли он по-прежнему использовать два физических ядра вместо двух потоков, используя 50% процессора вместо 25%? Все ли Hyper-Threading вызывают проблемы такого типа, искусственно используя половину того, что они действительно могли / должны делать? Как Windows знает, как справиться со всем этим?

Спасибо! Извините, если способ, которым я задал вопрос, был странным, просто пытался быть ясным по сжатому

1 ответ1

1

Да, он делает то, что вы хотите. Windows знает, какой логический процессор и в каком ядре. Он будет использовать только один "логический процессор" на ядро, пока у вас не будет больше потоков, которые будут работать одновременно, чем у вас ядер.

("Логический процессор" - это имя, которое Windows внутренне использует для «чего-то, что может запустить поток». Если у вас не включен HT, то по одному LP на ядро. Если у вас включен HT, есть два LP на ядро. Это позволяет нам всегда просто говорить о "логических процессорах", а не постоянно оценивать вещи.)

Точный алгоритм выбора "где запустить поток" описан в Windows Internals Соломоном, Руссиновичем и Ионеску. Это длинное описание, включающее в себя множество "крайних случаев", таких как припаркованные ядра, машины NUMA (с двумя или более физическими пакетами ЦП, каждый со своим банком ОЗУ) и т.д.

Но да: Windows пытается поддерживать один LP в каждом бездействующем ядре, пока не будет запущено больше потоков, чем ядер.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .