确定“英特尔内部指南”中列出的CPUID

时间:2013-03-12 17:46:54

标签: intrinsics cpuid

在英特尔内部指南中,在几个内在函数的底部有“延迟和吞吐量信息”,列出了几个CPUID的性能。

例如,内在_mm_hadd_pd的内在指南中的表格如下所示:

CPUID(s)               Parameters   Latency   Throughput
0F_03                                    13            4
06_2A                  xmm1, xmm2         5            2
06_25/2C/1A/1E/1F/2E   xmm1, xmm2         5            2
06_17/1D               xmm1, xmm2         6            1
06_0F                  xmm1, xmm2         5            2

现在:我如何确定我的CPU有什么ID?

我正在使用Kubuntu 12.04并尝试使用sudo dmidecode -t 4以及Ubuntu软件包中的小程序cpuid,但它们的输出并不是真的有用。

我无法在上述命令的输出中的任何位置找到“内在指南”中列出的任何字符串。

1 个答案:

答案 0 :(得分:1)

您可以使用CPUID指令获取该信息,其中

  

大家庭,位置20到   27与家庭一起使用   在位位置8到11中指定的代码,用于指示处理器是否属于   Intel386,Intel486,Pentium,Pentium Pro或Pentium 4系列处理器。 P6   系列处理器包括基于Pentium Pro处理器架构的所有处理器   并有一个等于00h的大家庭   和家庭代码等于06h。奔腾4   系列处理器包括基于英特尔NetBurst®微体系结构的所有处理器   并且有一个等于00h的扩展族和一个等于0Fh的家族码。

     

bit positi中指定的扩展模型   16至19日,与...一起   第4位到第7位指定的型号是   用于识别处理器的型号   在处理器的家庭中。

请参阅Intel Processor Identification and the CPUID Instruction中的第22页了解更多详情。

实际的CPUID是“family_model”。 以下代码应该完成这项工作:

#include "stdio.h"

int main () {

  int ebx = 0, ecx = 0, edx = 0, eax = 1;
  __asm__ ("cpuid": "=b" (ebx), "=c" (ecx), "=d" (edx), "=a" (eax):"a" (eax));

  int model = (eax & 0x0FF) >> 4;
  int extended_model = (eax & 0xF0000) >> 12;
  int family_code = (eax & 0xF00) >> 8;
  int extended_family_code = (eax & 0xFF00000) >> 16;

  printf ("%x %x %x %x \n", eax, ebx, ecx, edx);
  printf ("CPUID: %02x %x\n", extended_family_code | family_code, extended_model | model);
  return 0;
}

对于我的电脑,我得到了:

  

CPUID:06_25

希望它有所帮助。