我正在为我的爱好操作系统编写CPU检测和一般环境检测代码。有没有需要多次调用CPUID的情况?也就是说,如果系统有多个核心,操作系统是否需要在每个核心上调用CPUID ?
AMD和Intel的CPUID手册对此都不清楚。在osdev wiki上有一篇文章提到调用CPUID称为detection CPU Topology,但是据我所知,不清楚何时以及需要调用CPUID多少次。
既然已经快一个星期了,还没有人能回答这个问题(可能是因为假期的缘故),我还是试着回答这个问题吧。
我想答案是肯定的。您可能需要在每个核心上调用CPUID
。其中一个原因是,并不是所有的(甚至是x86)系统都是同构的。
例如,我在一个超频论坛上读到(我找不到链接),可以在一些双插槽服务器板上混合两个不同的处理器模型。这个人有一个双插槽的1366系统,有两个不同速度的处理器。(以及不同型号)
因此,在这种情况下,调用CPUID
将取决于线程所在的处理器-因此您需要每个处理器调用一次以获取所有信息。
在我的一个服务器主板的手册中,它还声明允许混合使用不同型号的处理器(有一定的限制)。当然,可以将同一处理器模型的两个不同步骤混合在一起。
这个原因(异构拓扑),已经是需要在每个核心上调用CPUID
的原因。