我正在为我的爱好操作系统开发CPU检测和一般环境检测代码。有没有需要多次调用CPUID的情况?也就是说,如果系统有多个内核,操作系统是否需要在每个内核上调用CPUID? NUMA也是如此。
AMD和Intel CPUID手册都不清楚。在osdev wiki上有一篇文章提到调用名为Detecting CPU Topology的CPUID,但是我的阅读并不清楚需要调用CPUID的时间和次数。
答案 0 :(得分:3)
由于已经差不多一个星期而且没有人能够回答这个问题(可能是因为假期),所以无论如何我都会尝试回答这个问题。
我认为答案是肯定的。您可能需要在每个核心上调用CPUID
。其中一个原因是,今天并非所有(甚至是x86)系统都是同质的。
例如,我读过一个超频论坛(我找不到链接),可以在一些双插槽服务器主板上混合两个不同的处理器型号。这个人有一个带有两个不同速度处理器的双插槽1366系统。 (和不同的型号#s)
因此,在这种情况下,调用CPUID
将取决于线程所在的处理器 - 因此,您需要在每个处理器上调用一次以获取所有信息。
在我的一个服务器主板的手册中,它还声明您可以混合使用不同型号的处理器(具有某些限制)。当然,可以混合两个不同的steppings相同的处理器模型。
单独这个原因(异构拓扑),已经有理由需要在每个核心上调用CPUID
。