O Windows sabe como apropriadamente atribuir threads a um processador quad-core com Hyper-Threading ativado?

0

Então, eu tenho tentado google para esta resposta, mas não consigo encontrar uma resposta técnica direta para a pergunta. (Ou se o fizesse, era de uma maneira confusa)

Então, digamos que você tenha um programa / jogo que use 2 threads e apenas 2 threads. Com uma CPU quad-core e hyper threading, saberá ainda usar dois núcleos PHYSICAL em vez de apenas 2 threads, usando 50% da CPU em vez de 25% dela? O Hyper-threading causa todos os problemas deste tipo, usando artificialmente metade do que realmente poderia / deveria fazer? Como o Windows sabe como lidar com tudo isso?

Obrigado! Desculpe se a maneira que eu fiz a pergunta foi estranha, apenas tentando ser claro e conciso.

ConfusedHyperThreader
fonte
1
Você criou uma conta chamada ConfusedHyperThreader ? :D
ADTC
1
Isso me deu a opção de me inscrever como convidado anônimo, e depois pediu um nome ... então eu dei um lol
ConfusedHyperThreader
Alguém sabe a resposta para isso ... ninguém?
ConfusedHyperThreader
Desculpe que ninguém tem uma resposta ainda. Talvez você possa expandir sua pergunta com o quão longe você foi, o que aprendeu até agora e o que exatamente não está claro. Eu pesquisei um pouco, mas também estou sem sorte :)
ADTC
Eu não tenho uma fonte, mas eu acredito que o Vista e o up estão "cientes do hyperthreading" e sabem a diferença entre núcleos reais e hyperthread.
LawrenceC

Respostas:

1

Sim, faz o que você quer. O Windows sabe qual processador lógico está em qual núcleo. Ele usará apenas um "processador lógico" por núcleo até que você tenha mais encadeamentos que desejem executar ao mesmo tempo que os núcleos.

("Processador lógico" é um nome que o Windows usa internamente para "algo que pode executar um thread". Se você não tiver o HT ativado, haverá um LP por núcleo. Se você tiver o HT ativado, haverá dois LPs por núcleo. Isso nos permite sempre simplesmente falar sobre "processadores lógicos" em vez de ter que constantemente qualificar as coisas.

O algoritmo exato para escolher "onde executar um thread" é ​​descrito em Internals do Windows por Salomão, Russinovich e Ionescu. É uma descrição demorada, incluindo muitos "casos de borda", como núcleos estacionados, máquinas NUMA (aquelas com dois ou mais pacotes de CPU físicos, cada um com seu próprio banco de RAM), etc.

Mas, sim: o Windows tenta manter um LP em cada núcleo inativo, até que haja mais encadeamentos que desejem executar do que núcleos.

Jamie Hanrahan
fonte