2012-12-07 9 views
6

Czy to jest oczekiwane? Spodziewałem się, że mój procesor Sandy Bridge zgłosi, że potrafi obsłużyć instrukcje MMX, SSE i SSE2. Czy te bity nie są ustawione, ponieważ te "stare" zestawy instrukcji zostały "zastąpione" przez niektóre z nowszych?instrukcja obsługi na i5-2500k: Bity MMX, SSE, SSE2 nie są ustawione

Użyłem this code here, aby umieścić wykrywanie CPU w moim kodzie.

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

wyjściowa:

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

To pytanie może być również dobre referencje: http://stackoverflow.com/questions/6121792/how-to-programmically-check-if-a-cpu-supports-sse3 – Mysticial

Odpowiedz

6

Głupi błąd. Zakładałem, że pierwszy wiersz w tabeli był dla EAX, ale jest dla EDX.

Prawidłowe wyniki są generowane. Cóż, HT nie jest obsługiwany przez ten układ, ale być może ten jest zawsze ustawiony.

Aktualizacja: okazuje się, że "HT" oznacza> 1 logiczny wątek na opakowaniu (którego ten chip ma 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 
Powiązane problemy