确定"英特尔内部电路指南"中列出的CPUID



在"英特尔Intrnsics指南"中,几个Intrnsics的底部有"延迟和吞吐量信息",列出了几个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,但它们的输出并不是很有用。

在上面命令的输出中,我找不到《本质指南》中列出的任何字符串。

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

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

位positi中指定的扩展模型第16至19页,结合位4至7中指定的型号为用于识别处理器的型号处理器家族内。

有关更多详细信息,请参阅"英特尔处理器标识和CPUID指令"中的第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 %xn", extended_family_code | family_code, extended_model | model);
  return 0;
}

对于我的电脑,我得到:

CPUID:06-25

希望能有所帮助。

相关内容

  • 没有找到相关文章

最新更新