【发布时间】:2012-01-23 23:38:16
【问题描述】:
我正在为我的爱好操作系统编写 CPU 检测和一般环境检测代码。是否存在需要多次调用 CPUID 的情况?那就是如果系统有多个核心,操作系统是否需要在每个核心上调用CPUID? NUMA 也一样。
AMD 和Intel CPUID 手册对此都不清楚。 osdev wiki 上有一篇文章提到调用 CPUID 称为 Detecting CPU Topology,但我的阅读并不清楚何时以及需要调用多少次 CPUID。
【问题讨论】:
-
我认为 CPUID 可能出现异常行为的一种情况是 AMD Fusion,它在同一芯片上同时包含 CPU 和 GPU。您必须查看文档以获取更多信息。除此之外,我不明白为什么任何内部 CPU 内核会显示与另一个内核不同的 CPUID。
-
除了给定的答案之外,多次调用 CPUID 的另一个原因是使用 rdtsc 指令进行性能测量时。您通常在 cpuid 之前使用它,因为 cpuid 是一个“序列化”指令并防止流水线操作,但 cpuid 也有一个讨厌的习惯,即在它被调用的前几次执行中花费更长的时间(根据 rdtsc 上的旧英特尔手册),所以它是典型的在启动时调用它几次以确保它被加速,然后在所有 rdtsc 调用之前使用它。