2012-12-07 20 views
6

Điều này có được mong đợi không? Tôi mong đợi CPU Sandy Bridge của tôi báo cáo rằng nó có thể xử lý các lệnh MMX, SSE và SSE2. Các bit này không được thiết lập vì các tập lệnh "cũ" này đã được "superceded" bởi một số bộ mới hơn?hướng dẫn cpuid trên i5-2500k: các bit MMX, SSE, SSE2 không được đặt

Tôi đã sử dụng this code here để đặt phát hiện CPU vào mã của mình.

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

đầu ra:

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

Câu hỏi này cũng có thể là một tài liệu tham khảo tốt: http://stackoverflow.com/questions/6121792/how-to-programmically-check-if-a-cpu-supports-sse3 – Mysticial

Trả lời

6

Dumb sai lầm. Tôi cho rằng hàng đầu tiên trong bảng là dành cho EAX nhưng nó dành cho EDX.

Kết quả chính xác được tạo ra. Vâng, HT không được hỗ trợ bởi con chip này nhưng có lẽ cái đó luôn được đặt.

Cập nhật: chỉ ra "HT" có nghĩa là> 1 chuỗi logic trên gói (trong đó chip này có 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 
Các vấn đề liên quan