如何使用GetNumaProximityNode(Win7 +)?

时间:2010-01-24 08:33:48

标签: c++ optimization memory cpu numa

从Win7 / Server2008R2开始,GetNumaProximityNode(Ex)功能可用。它应该有助于检索NUMA节点之间的距离,但我无法从文档(http://msdn.microsoft.com/en-us/library/ms683206(VS.85).aspx)中了解它应该如何工作。它表示你给它一个距离,它返回相应的节点(如果有的话)。

从Linux内核和一些HP APIC文档中读取一些代码我看到距离以10的整数倍(自身的距离为10)表示,但它也可能是18(不是两倍慢) 。但是我仍然无法弄清楚如何使用Windows API计算两个节点之间的距离(在Linux libnuma下有一个“距离”功能可以做到这一点。)

有谁知道如何使用这个功能?

1 个答案:

答案 0 :(得分:1)

我找到了适用于Windows的解决方案(虽然尚未测试)。距离可以在SLIT - 系统位置信息表中找到 - 这是OEM提供的扩展,可通过ACPI获得。它包含描述距离的N_CPU x N_CPU矩阵([1] [3]是节点1和3之间的距离; [Y] [Y]总是10;低于10是无效的)。

Windows Vista +有GetSystemFirmwareTable方法可用于检索此表(似乎在XP下它可以从注册表中检索,但它更难)。
该表的结构可以在ACPICA包(http://www.acpica.org)中找到。