我正在为自己的爱好OS进行CPU检测和常规环境检测代码。是否曾经有过需要多次调用CPUID的情况?也就是说,如果系统具有多个内核,那么操作系统是否需要在每个内核上调用CPUID?与NUMA相同。
AMD和Intel CPUID手册都不清楚。 osdev Wiki上有一篇文章提到调用CPUID称为Detecting CPU Topology,但据我所知,关于何时需要调用CPUID以及调用多少次尚不清楚。
最佳答案
由于已经快一周了,而且没人能回答这个问题(可能是因为假期),所以我还是会尝试回答这个问题。
我认为答案是肯定的。 您可能需要在每个核心上调用CPUID
。原因之一是,当今并非所有(甚至x86)系统都是同类的。
例如,我在一个超频论坛上读到(我找不到链接),有可能在某些双插槽服务器板上混合使用两种不同的处理器型号。这个人有一个带两个不同速度处理器的双路1366系统。 (以及其他型号)
因此,在这种情况下,调用CPUID
将取决于线程所在的处理器-因此,您需要为每个处理器调用一次以获取所有信息。
在我的服务器主板之一的手册中,它还指出允许您混合使用不同型号的处理器(有一定限制)。当然,可以混合使用同一处理器模型的两个不同的steppings。
仅出于这个原因(异构拓扑),就已经是需要在每个内核上调用CPUID
的原因。
关于x86 - 多核/NUMA上的CPUID,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8568135/