在英特尔内部指南中,在几个内在函数的底部有“延迟和吞吐量信息”,列出了几个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
,但它们的输出并不是真的有用。
我无法在上述命令的输出中的任何位置找到“内在指南”中列出的任何字符串。
答案 0 :(得分:1)
您可以使用CPUID指令获取该信息,其中
大家庭,位置20到 27与家庭一起使用 在位位置8到11中指定的代码,用于指示处理器是否属于 Intel386,Intel486,Pentium,Pentium Pro或Pentium 4系列处理器。 P6 系列处理器包括基于Pentium Pro处理器架构的所有处理器 并有一个等于00h的大家庭 和家庭代码等于06h。奔腾4 系列处理器包括基于英特尔NetBurst®微体系结构的所有处理器 并且有一个等于00h的扩展族和一个等于0Fh的家族码。
bit positi中指定的扩展模型 16至19日,与...一起 第4位到第7位指定的型号是 用于识别处理器的型号 在处理器的家庭中。
请参阅Intel Processor Identification and the CPUID Instruction中的第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