2012-12-07 4 views
6

Est-ce normal? Je m'attendais à ce que mon processeur Sandy Bridge signale qu'il peut gérer les instructions MMX, SSE et SSE2. Ces bits ne sont-ils pas définis parce que ces "anciens" jeux d'instructions ont été "supplantés" par certains des plus récents?Instruction cpuid sur i5-2500k: les bits MMX, SSE, SSE2 ne sont pas réglés

J'ai utilisé this code here pour mettre la détection du processeur dans mon code.

#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; 
} 

sortie:

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 
+0

Cette question pourrait aussi être une bonne référence: http://stackoverflow.com/questions/6121792/how-to-programmically-check-if-a-cpu-supports-sse3 – Mysticial

Répondre

6

erreur Dumb. J'ai supposé que la première rangée dans la table était pour EAX mais c'est pour EDX.

Des résultats corrects sont obtenus. Eh bien, HT n'est pas supporté par cette puce mais peut-être que c'est toujours réglé. Mise à jour: il s'avère que "HT" signifie> 1 thread logique sur l'emballage (dont cette puce a 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 
Questions connexes