TaskManager, HyperThreading: Quais CPUs são reais e quais são HT?

4

Quando abro o Gerenciador de Tarefas, vejo 8 CPUs no Gráfico da CPU, já que tenho um Core i7 com 4 Núcleos + HyperThreading (em execução no Win7 x64).

Quando eu defino a afinidade do processo, eu coloco o CPU 0 na CPU 7.

Como posso saber quais CPUs são núcleos reais e quais são os HT Cores?

Ouvi dizer que 0/2/4/6 são os núcleos reais e, portanto, o primeiro, terceiro, quinto e sétimo gráficos da CPU são reais.

Isso é verdade?

    
por Michael Stum 15.11.2010 / 23:17

2 respostas

4

A Intel originalmente queria que os implementadores de BIOS enumerassem todas as CPUs físicas antes das CPUs lógicas (HT). A razão para isso era que, se um sistema operacional suportasse menos CPUs do que as disponíveis no sistema, ele veria os núcleos físicos antes de ver os núcleos lógicos. Isso não é um problema hoje em dia, mas quando era possível comprar um Pentium 4 w / HT de dois núcleos, colocá-lo em um sistema Windows 2000 Pro e ver apenas 2 CPUs, não importava o quê, era uma preocupação real. Eu duvido que a implementação se desviasse disso. Portanto, no seu caso, é mais provável que os processadores 0-3 sejam os núcleos físicos e os processadores 4-7 sejam os núcleos HT.

Se você está tendo problemas com seu próprio software multi-threaded não balanceando bem por causa do HT, então provavelmente você vai querer limitar sua contagem de threads somente aos núcleos físicos, ou trabalhar em seus algoritmos / estruturas de dados para serem mais HT-friendly. GetLogicalProcessorInformation é a chamada da API que você precisa examinar para determinar a contagem de núcleos físico versus lógico. Esta página tem código de amostra para determinar o número de CPUs Físicas.

Tornar o seu código mais compatível com HT é, bem, uma bola totalmente diferente de cera e não é realmente adequada para o SuperUser. : -)

    
por 08.12.2010 / 16:13
0

Bem, o objetivo dos núcleos HT é fazer com que eles apareçam no sistema como se fossem processadores reais. Não tenho 100% de certeza, mas acho que não há uma maneira real de saber quais são reais e quais são os HT.

Além disso, se eu entendi HT corretamente, funciona usando o poder de processamento livre do núcleo real. Se o núcleo HT estiver executando um processo exigente e o núcleo real não estiver, a potência de processamento será usada pelo HT. Ainda assim, isso poderia levar a problemas onde os processos mais exigentes poderiam ser dados a núcleos reais e seus núcleos HT e ter alguns núcleos reais executando tarefas em segundo plano.

    
por 15.11.2010 / 23:25