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