在双四核GetProcessAffinityMask(或 taskman.exe 中“设置关联”的对话框)上,将报告八个逻辑处理器。如何找出哪个逻辑处理器在哪个物理处理器上?特别是:哪些逻辑处理器在同一个物理处理器上?
编辑:如果无法以编程方式执行此操作,是否有人知道法线映射是什么?是第一个处理器上的前四个,第二个处理器上的后四个,还是第一个处理器上的奇数编号和第二个处理器上的偶数编号?
在双四核GetProcessAffinityMask(或 taskman.exe 中“设置关联”的对话框)上,将报告八个逻辑处理器。如何找出哪个逻辑处理器在哪个物理处理器上?特别是:哪些逻辑处理器在同一个物理处理器上?
编辑:如果无法以编程方式执行此操作,是否有人知道法线映射是什么?是第一个处理器上的前四个,第二个处理器上的后四个,还是第一个处理器上的奇数编号和第二个处理器上的偶数编号?
您可以使用Win32_Processor
WMI 类查询系统上的 CPU 的核心数、逻辑处理器数、体系结构、缓存内存和其他信息。
要查询系统中逻辑处理器之间的关系信息,可以使用GetLogicalProcessorInformation API 函数。
如果您不想自己编写代码,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 个 *,每个内核两个。但是,尚不清楚 * 的排列如何与 Windows 呈现的逻辑处理器列表相匹配。例如,任务管理器为我提供了一个对话框,用于为任何进程分配处理器关联,标记为 CPU 0 到 CPU 7。假设您可以获取 coreinfo 的输出并从左到右为逻辑处理器编号是公平的(但不是必需的)。因此“CPU 5”将是在物理处理器 2 上运行的第二个超线程。
编号以顺序方式完成:首先是所有物理核心,然后是逻辑核心 [1]。