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

5 intrinsics cpuid

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

例如,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
Run Code Online (Sandbox Code Playgroud)

现在:我如何确定我的CPU有哪些ID?

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

我无法在上面命令的输出中的任何位置找到"内在指南"中列出的任何字符串.

小智 1

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

\n\n
\n

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

\n\n

位位置 16 到 19 中指定的扩展型号与位 4 到 7 中指定的型号一起用于识别处理器中的处理器型号\xe2\x80\x99s家庭。

\n
\n\n

有关详细信息,请参阅第 22 页“英特尔处理器标识和 CPUID 指令” 。

\n\n

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

\n\n
#include "stdio.h"\n\nint main () {\n\n  int ebx = 0, ecx = 0, edx = 0, eax = 1;\n  __asm__ ("cpuid": "=b" (ebx), "=c" (ecx), "=d" (edx), "=a" (eax):"a" (eax));\n\n  int model = (eax & 0x0FF) >> 4;\n  int extended_model = (eax & 0xF0000) >> 12;\n  int family_code = (eax & 0xF00) >> 8;\n  int extended_family_code = (eax & 0xFF00000) >> 16;\n\n  printf ("%x %x %x %x \\n", eax, ebx, ecx, edx);\n  printf ("CPUID: %02x %x\\n", extended_family_code | family_code, extended_model | model);\n  return 0;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

对于我的电脑,我得到:

\n\n
\n

CPUID:06_25

\n
\n\n

希望能帮助到你。

\n