将逻辑处理器映射到物理处理器

时间:2009-01-08 10:03:51

标签: winapi multicore affinity

在双四核GetProcessAffinityMask(或taskman.exe中“Set affinity”对话框中)将报告八个逻辑处理器。如何找出哪个逻辑处理器在哪个物理处理器上?特别是:哪些逻辑处理器在同一物理处理器上?

编辑:如果无法以编程方式执行此操作,是否有人只知道正常映射是什么?第一个处理器上的前四个是第二个处理器上的前四个,第二个上是第四个,第二个上是奇数,第二个是偶数吗?

3 个答案:

答案 0 :(得分:7)

您可以使用Win32_Processor WMI类来查询核心数,逻辑处理器数,体系结构,高速缓存以及有关系统上CPU的其他信息。

要查询有关系统中逻辑处理器之间关系的信息,您可以使用GetLogicalProcessorInformation API函数。

答案 1 :(得分:2)

如果您不想自己编写代码,SysInternal的方便的coreinfo实用程序最接近于回答您的问题。它实现了Mehrdad推荐的GetLogicalProcessorInformation。对于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个,每个核心有2个,正如预期的那样。但是,不清楚的是* *的排列如何与Windows提供的逻辑处理器列表相匹配。例如,任务管理器为我提供了一个对话框,用于为任何进程分配处理器关联,标记为CPU 0到CPU 7。假设您可以获取coreinfo的输出并从逻辑处理器从左到右编号,这是公平的(但不是必需的)。所以“CPU 5”将是物理处理器2上运行的第二个超线程。

答案 2 :(得分:1)

编号以顺序方式完成:首先是所有物理核心,然后是逻辑核心[1]。

[1] CPU Numbering on a hypertheading enabled system