Знает ли Windows, как правильно назначать потоки четырехъядерному процессору, на котором включена технология Hyper-Threading?

272
ConfusedHyperThreader

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

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

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

0
Вы создали учетную запись с именем _ConfusedHyperThreader_? `: D` ADTC 10 лет назад 1
Это дало мне возможность зарегистрироваться в качестве анонимного гостя, а затем он попросил имя ... так что я дал ему один лол ConfusedHyperThreader 10 лет назад 1
Кто-то знает ответ на этот ... никто? ConfusedHyperThreader 10 лет назад 0
Извините, что пока ни у кого нет ответа. Возможно, вы можете расширить свой вопрос тем, как далеко вы продвинулись, что вы узнали до сих пор, и что точно не ясно. _ Я немного погуглил, но мне тоже не повезло:) _ ADTC 10 лет назад 0
У меня нет источника, но я полагаю, что Vista и выше "осведомлены о гиперпоточности" и знают разницу между реальным и гиперпоточным ядрами. LawrenceC 9 лет назад 0

1 ответ на вопрос

1
Jamie Hanrahan

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

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

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

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