Отображение логических процессоров на физические процессоры - PullRequest
3 голосов
/ 08 января 2009

На двухъядерном ядре GetProcessAffinityMask (или диалоговое окно «Установить сходство» в taskman.exe) сообщит о восьми логических процессорах. Как узнать, какой логический процессор на каком физическом процессоре? Особенно: какие логические процессоры находятся на одном физическом процессоре?

РЕДАКТИРОВАТЬ: Если это невозможно сделать программно, кто-нибудь просто знает, что такое нормальное отображение? Первые четыре на первом процессоре и вторые четыре на втором или нечетные на первом и четные на втором?

Ответы [ 3 ]

7 голосов
/ 08 января 2009

Вы можете использовать Win32_Processor класс WMI для запроса количества ядер, количества логических процессоров, архитектуры, кэш-памяти и другой информации о процессорах в системе.

Чтобы запросить информацию о взаимосвязи между логическими процессорами в системе, вы можете использовать GetLogicalProcessorInformation API-функцию.

2 голосов
/ 06 сентября 2011

Если вы не хотите писать код самостоятельно, удобная утилита 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.

1 голос
/ 06 октября 2011

Нумерация выполняется последовательно: сначала все физические ядра, а затем логические ядра [1].

[1] Нумерация ЦП в системе с включенным гипертехом

...