如何查找进程正在运行的物理套接字ID /编号?

时间:2012-06-26 18:18:03

标签: c++ c windows

我想知道是否有任何方法可以找到当前进程正在运行的实际物理处理器/套接字号,或者它的映射提供了逻辑处理器号。

我有一个8插槽系统,总共有128(0-127)个逻辑处理器。 从我在msdn中读到的内容来看,它们将分为2个处理器组,每个处理器组包含64个逻辑处理器。 http://msdn.microsoft.com/en-us/library/dd405503

我试过看cpuid和GetNumaProcessorNodeEx 从cpuid,APIC id帮助识别逻辑处理器ID,并从GetNumaProcessorNodeEx,我得到numa节点(如果有64或更少数量的逻辑处理器,我发现这是有用的) 如果逻辑处理器是超线程也可以吗?

我正在尝试创建这样的工具。

处理器no - socket / core id / HT

处理器0 - 0/0/0

处理器1 - 0/1/1

处理器2 - 0/2/0

...

处理器8 - 1/0/0

处理器9 - 1/1/1

...

任何帮助或链接来解决这个问题都会很棒。

谢谢

1 个答案:

答案 0 :(得分:2)

套接字/核心/线程层次结构位于APIC ID的位中 N个低位是线程,M low是核心,剩余的高位是插座 要查找N和M,您需要使用一些CPUID代码:
代码1为您提供每个插槽的线程数(在EBX中的某个位置) 代码4为您提供每个插槽的核心数(在EAX中) 例如,如果每个套接字有12个线程和6个核心,则最低位是线程ID,接下来的3个是核心,其余是套接字。