【问题标题】:cpuid instruction on i5-2500k: MMX, SSE, SSE2 bits are not seti5-2500k 上的 cpuid 指令:未设置 MMX、SSE、SSE2 位
【发布时间】:2012-11-25 07:34:52
【问题描述】:

这是预期的吗?我希望我的 Sandy Bridge CPU 报告它可以处理 MMX、SSE 和 SSE2 指令。这些位是否没有设置,因为这些“旧”指令集已被一些新指令集“取代”?

我使用this code here 将 CPU 检测放入我的代码中。

#include "CPUID.h"
int main(int argc, char *argv[]) {
    CPUID cpuid;
    cpuid.load(0);
    printf("CPU: %.4s%.4s%.4s", 
        (const char*)&cpuid.EBX(),
        (const char*)&cpuid.EDX(),
        (const char*)&cpuid.ECX()
    );
    char brand[0x30];
    cpuid.load(0x80000002); memcpy(brand,&cpuid.EAX(),16);
    cpuid.load(0x80000003); memcpy(brand+16,&cpuid.EAX(),16);
    cpuid.load(0x80000004); memcpy(brand+32,&cpuid.EAX(),16);
    printf("%.48s\n",brand);
    cpuid.load(1);
    // tests bit 23 of ECX for popcnt instruction support
    printf("MMX - %s\n", cpuid.EAX() & (1 << 23) ? "yes" : "no");
    printf("SSE - %s\n", cpuid.EAX() & (1 << 25) ? "yes" : "no"); 
    printf("SSE2 - %s\n", cpuid.EAX() & (1 << 26) ? "yes" : "no"); 
    printf("SSE3 - %s\n", cpuid.ECX() & (1 << 0) ? "yes" : "no"); 
    printf("SSSE3 - %s\n", cpuid.ECX() & (1 << 9) ? "yes" : "no"); 
    printf("SSE4.1 - %s\n", cpuid.ECX() & (1 << 19) ? "yes" : "no"); 
    printf("SSE4.2 - %s\n", cpuid.ECX() & (1 << 20) ? "yes" : "no"); 
    printf("AES - %s\n", cpuid.ECX() & (1 << 25) ? "yes" : "no"); 
    printf("AVX - %s\n", cpuid.ECX() & (1 << 28) ? "yes" : "no"); 
    printf("HT - %s\n", cpuid.EAX() & (1 << 28) ? "yes" : "no"); 
    printf("IA64 (emulating x86) - %s\n", cpuid.EAX() & (1 << 30) ? "yes" : "no"); 
    printf("Hypervisor? - %s\n", cpuid.ECX() & (1 << 31) ? "yes" : "no"); 
    printf("popcnt - %s\n", cpuid.ECX() & (1 << 23) ? "yes" : "no");
    return 0;
}

输出:

CPU: GenuineIntel       Intel(R) Core(TM) i5-2500K CPU @ 3.30GHz
MMX - no
SSE - no
SSE2 - no
SSE3 - yes
SSSE3 - yes
SSE4.1 - yes
SSE4.2 - yes
AES - yes
AVX - yes
HT - no
IA64 (emulating x86) - no
Hypervisor? - no
popcnt - yes

【问题讨论】:

标签: c++ cpu intel instruction-set cpuid


【解决方案1】:

愚蠢的错误。我假设表中的第一行是 EAX,但它是 EDX。

产生正确的结果。嗯,这个芯片不支持HT,但也许那个总是设置的。

更新:原来“HT”的意思是> 1个逻辑线程封装(该芯片有4个)。

CPU: GenuineIntel       Intel(R) Core(TM) i5-2500K CPU @ 3.30GHz
MMX - yes
SSE - yes
SSE2 - yes
SSE3 - yes
SSSE3 - yes
SSE4.1 - yes
SSE4.2 - yes
AES - yes
AVX - yes
HT - yes
IA64 (emulating x86) - no
Hypervisor? - no
popcnt - yes

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-27
    相关资源
    最近更新 更多