Domanda

Su un dual quad-core GetProcessAffinityMask (o la finestra di dialogo da " Imposta affinità " in taskman.exe) riporterà otto processori logici. Come faccio a sapere quale processore logico si trova su quale processore fisico? In particolare: quali processori logici si trovano sullo stesso processore fisico?

MODIFICA: Se non è possibile farlo a livello di programmazione, qualcuno sa semplicemente qual è la normale mappatura? I primi quattro sono sul primo processore e i secondi quattro sul secondo o i numeri dispari sul primo e i numeri pari sul secondo?

È stato utile?

Soluzione

È possibile utilizzare la classe WMI Win32_Processor per interrogare il numero di core, il numero di processori logici, l'architettura, la memoria cache e altre informazioni sulle CPU sul sistema.

Per richiedere informazioni sulla relazione tra i processori logici in un sistema, è possibile utilizzare GetLogicalProcessorInformation funzione API.

Altri suggerimenti

Se non vuoi scrivere tu stesso il codice, l'utilità coreinfo di SysInternal si avvicina di più alle tue domande. Implementa GetLogicalProcessorInformation come raccomandato da Mehrdad. Per un Xeon E5640 (quad core, 8 thread), ottieni da 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)

Ci sono 8 * per gli 8 hyperthread, due per core, come previsto per questo chip. Ciò che non è chiaro, tuttavia, è come la disposizione di * corrisponda all'elenco dei processori logici mentre Windows li presenta. Ad esempio, Task Manager mi dà una finestra di dialogo per l'assegnazione dell'affinità del processore, etichettata da CPU 0 a CPU 7, per qualsiasi processo. È corretto (ma non necessario) presumere che sia possibile prendere l'output di coreinfo e numerare i processori logici da sinistra a destra. Quindi "CPU 5" sarebbe il secondo hyperthread in esecuzione sul processore fisico 2.

La numerazione viene eseguita in modo sequenziale: prima tutti i core fisici seguiti dai logici [1].

[1] Numerazione CPU su un sistema abilitato per hypertheading

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top