Если вы не хотите писать код самостоятельно, удобная утилита SysInternal coreinfo подходит для ответа на ваши вопросы. Он реализует GetLogicalProcessorInformation, как рекомендует Mehrdad. Для Xeon E5640 (четырехъядерный, 8 потоков) вы получаете из 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)
Есть 8 * для 8 гиперпотоков, по два на ядро, как и ожидалось для этого чипа. Однако неясно, как расположение * совпадает со списком логических процессоров, как их представляет Windows. Например, диспетчер задач дает мне диалоговое окно для назначения привязки процессора, обозначенного как CPU 0 - CPU 7, для любого процесса. Справедливо (но не обязательно) предполагать, что вы можете взять вывод coreinfo и пронумеровать логические процессоры слева направо. Таким образом, «CPU 5» будет второй гиперпотокой, работающей на физическом процессоре 2.