X86 从CPUID获取CPU步骤代码

X86 从CPUID获取CPU步骤代码,x86,intel,cpuid,X86,Intel,Cpuid,我知道可以使用CPUID提取CPU规格,但我还没有看到像SLB8X这样提取CPU步进代码的方法,SLB8X是在马来西亚制造的Intel Xeon X3360 2.83 Ghz 12M缓存和1333Mhz。我相信相同的CPU ID信息与多个CPU步骤代码有关 这里是Comp-Sci的学士学位,但不是程序员,只是为我的程序员获取一些信息,看看上面是否可行。或者,Intel.com和/或AMD上是否有将CPUID映射到Step代码的表?CPU不会报告这一点。您可以在Linux上使用sudodmidec

我知道可以使用CPUID提取CPU规格,但我还没有看到像SLB8X这样提取CPU步进代码的方法,SLB8X是在马来西亚制造的Intel Xeon X3360 2.83 Ghz 12M缓存和1333Mhz。我相信相同的CPU ID信息与多个CPU步骤代码有关


这里是Comp-Sci的学士学位,但不是程序员,只是为我的程序员获取一些信息,看看上面是否可行。或者,Intel.com和/或AMD上是否有将CPUID映射到Step代码的表?

CPU不会报告这一点。您可以在Linux上使用
sudodmidecode--type processor
查找处理器信息。您将获得诸如签名:类型0,系列6,型号45,Stepping 7等信息。我将链接到Stepping ID的一个表,但是您的程序员可能会对features表感兴趣,这样他们就知道特定处理器支持什么指令,也就是说,如果他们在那么低的级别上工作。即使没有,这也是很有趣的

此站点包含以下两个表:

对于您特别需要的某些信息,本网站说:

品牌索引方法(在奔腾III Xeon®处理器中引入)提供了一个进入品牌标识表的入口点,该表由系统软件保存在内存中,可从系统级和用户级代码访问。。。然后,软件可以使用此索引在品牌标识表中查找处理器的品牌标识字符串。 然后参考表3-14,除非您已经有可以解释它的软件

不过,用01H加载EAX可能是您的程序员所需要的全部,因为作为回报,您将在EAX中获得模型、系列和处理器类型,如下所示: 然后,EBX中的值将是缓存线大小(EBX的第二个字节)、品牌索引(EBX的低字节)和APIC ID(EBX的高字节)

您可以使用以下方法检查这些值:

unsigned eax, ebx, ecx, edx;
if (__get_cpuid(0x00, &eax, &ebx, &ecx, &edx) == 0) {
    // cpuid not supported
}
if (eax < 0x14) {
    // leaf 0x14 not supported
}
__cpuid_count(0x14, 0x00, eax, ebx, ecx, edx); 
if ((ebx & 0x10) == 0) {
    // PTWRITE not supported
}
无符号eax、ebx、ecx、edx;
如果(获取cpuid(0x00,&eax,&ebx,&ecx,&edx)==0){
//不支持cpuid
}
if(eax<0x14){
//不支持叶0x14
}
__cpuid_计数(0x14、0x00、eax、ebx、ecx、edx);
如果((ebx&0x10)==0){
//不支持PTWRITE
}
我想您需要的是“规范代码”(而不是“步骤代码”)。如果这是正确的,请参阅(公认答案中的脚注)。大多数情况下(来自软件),它最终会变成一个巨大的表驱动混乱(从CPU的“系列,模型,从CPUID开始)。