在Intel Intrinsics Guide中,在几个Intrinsics的底部有'Latency and Throughput Information‘,列出了几个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?
我正在使用Kubuntu12.04,并尝试使用sudo dmidecode -t 4和Ubuntu包中的小程序cpuid,但它们的输出并不是很有用。
在上述命令的输出中,我找不到Intrinsics Guide中列出的任何字符串。
发布于 2013-05-08 00:16:41
您可以使用CPUID指令获取该信息,其中
在扩展系列中,位位置20至27与在位位置8至11中指定的系列代码一起使用,以指示处理器是否属于Intel386、Intel486、奔腾、奔腾Pro或奔腾4系列处理器。P6系列处理器包括基于Pentium Pro处理器体系结构的所有处理器,并且具有等于00h的扩展系列和等于06h的系列代码。奔腾4家族处理器包括所有基于英特尔NetBurst®微体系结构的处理器,其扩展家族等于00h,家族代码等于0Fh。
位位置16到19中指定的扩展型号与位4到7中指定的型号一起用于标识处理器系列中处理器的型号。
有关更多详细信息,请参阅第22页的Intel Processor Identification and the CPUID Instruction。
那么实际的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
希望能有所帮助。
https://stackoverflow.com/questions/15368394
复制相似问题