在"英特尔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
希望能有所帮助。