5

在 Intel Intrinsics Guide 中,几个 Intrinsics 的底部有“延迟和吞吐量信息”,列出了几个 CPUID 的性能。

例如,Intrinsics Guide 中的表格对于 Intrinsic 如下所示_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 并尝试使用Ubuntu 软件包sudo dmidecode -t 4中的小程序cpuid,但它们的输出并不是很有用。

我在上述命令的输出中的任何地方都找不到 Intrinsics Guide 中列出的任何字符串。

4

1 回答 1

1

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

扩展系列,位位置 20 到 27 与系列代码(在位位置 8 到 11 中指定)一起使用,以指示处理器是否属于 Intel386、Intel486、Pentium、Pentium Pro 或 Pentium 4 系列处理器。P6 系列处理器包括基于 Pentium Pro 处理器架构的所有处理器,并具有等于 00h 的扩展系列和等于 06h 的系列代码。Pentium 4 系列处理器包括所有基于 Intel NetBurst® 微架构的处理器,并具有等于 00h 的扩展系列和等于 0Fh 的系列代码。

第 16 位到第 19 位指定的扩展型号与第 4 位到第 7 位指定的型号一起用于识别处理器系列中的处理器型号。

有关详细信息,请参阅Intel 处理器标识和 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 %x\n", extended_family_code | family_code, extended_model | model);
  return 0;
}

对于我的电脑,我得到:

CPUID:06_25

希望能帮助到你。

于 2013-05-07T16:16:40.887 回答