Pergunta

Em um dual quad-core GetProcessAffinityMask (ou a caixa de diálogo de "afinidade Set" em taskman.exe) irá relatar oito processadores lógicos. Como faço para descobrir qual processador lógico está em qual processador físico? Especialmente: Que processadores lógicos estão no mesmo processador físico

?

EDIT: Se não for possível fazer isso programaticamente, não quem apenas sabe o que o mapeamento normal é? São os primeiros quatro no primeiro processador e o segundo de quatro no segundo ou são os ímpares numeradas no primeiro e no mesmo numeradas no segundo?

Foi útil?

Solução

Você pode usar Win32_Processor classe WMI para consultar o número de núcleos, número de processadores lógicos, arquitetura, memória cache e outras informações sobre as CPUs no sistema.

Para consultar informações sobre a relação entre os processadores lógicos em um sistema, você pode usar função API GetLogicalProcessorInformation .

Outras dicas

No caso de você não quer escrever o código você mesmo, utilidade coreinfo útil do Sysinternal mais se aproxima de responder às suas perguntas. Ele implementa GetLogicalProcessorInformation como Mehrdad recomenda. Para um Xeon E5640 (quad core, 8 threads), você começa a partir coreinfo:

c:\App\SysInternals>Coreinfo.exe -c

Coreinfo v3.0 - Dump information on system CPU and memory topology
Copyright (C) 2008-2011 Mark Russinovich
Sysinternals - www.sysinternals.com

Logical to Physical Processor Map:
**------  Physical Processor 0 (Hyperthreaded)
--**----  Physical Processor 1 (Hyperthreaded)
----**--  Physical Processor 2 (Hyperthreaded)
------**  Physical Processor 3 (Hyperthreaded)

Existem 8 * para os 8 hyperthreads, dois por núcleo, como esperado para este chip. O que não está claro, porém, é como o arranjo de * corresponde-se com a lista de processadores lógicos como o Windows apresenta-los. Por exemplo, o Gerenciador de Tarefas me dá uma caixa de diálogo para atribuir a afinidade do processador, chamado CPU 0 a CPU 7, para qualquer processo. É justo (mas não necessário) para assumir que você pode tomar a saída de coreinfo e número dos processadores lógicos da esquerda para a direita. Assim, "CPU 5" seria a segunda hyperthread em execução no processador físico 2.

A numeração é feita de uma maneira sequencial: em primeiro lugar todos os núcleos físicos seguido pelos núcleos lógicos [1]

.

[1] CPU Numeração em uma hypertheading sistema permitiu

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top