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

0

Então, tenho tentado pesquisar no Google por essa resposta, mas não consigo encontrar uma resposta técnica direta para a pergunta. (Ou se isso acontecesse, 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.

    
por ConfusedHyperThreader 19.12.2013 / 09:20

1 resposta

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 simplesmente falar sobre "processadores lógicos" ao invés de ter que constantemente qualificar as coisas.

O algoritmo exato para escolher "onde executar um thread" é descrito em Windows Internals por Solomon, Russinovich e Ionescu. É uma descrição demorada, incluindo muitos "casos extremos", 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 os núcleos.

    
por 12.09.2015 / 22:10