首頁  >  文章  >  後端開發  >  提供的程式碼足以檢查 CPU 上的 SSE3 支援嗎?

提供的程式碼足以檢查 CPU 上的 SSE3 支援嗎?

Susan Sarandon
Susan Sarandon原創
2024-11-16 16:53:03332瀏覽

Is the Provided Code Sufficient for Checking SSE3 Support on CPUs?

檢查 CPU 上的 SSE3 支援

問題

以下程式碼是否足以驗證 CPU 是否支援 SSE3 指令集?

bool CheckSSE3()
{
    int CPUInfo[4] = {-1};

    //-- Get number of valid info ids
    __cpuid(CPUInfo, 0);
    int nIds = CPUInfo[0];

    //-- Get info for id "1"
    if (nIds >= 1)
    {
        __cpuid(CPUInfo, 1);
        bool bSSE3NewInstructions = (CPUInfo[2] & 0x1) || false;
        return bSSE3NewInstructions;     
    }

    return false;      
}

答案

不幸的是,提供的程式碼片段在 Windows XP 上有限制。為了克服這個問題並確保在更廣泛的系統上準確檢測 SSE3 支持,建議採用更全面的解決方案。

以下方法可以在 Windows XP 和其他作業系統上提供可靠的 SSE3 偵測:

// Access CPUID instruction
#ifdef _WIN32
#define cpuid(info, x)    __cpuidex(info, x, 0)
#else
#include <cpuid.h>
void cpuid(int info[4], int InfoType){
    __cpuid_count(InfoType, 0, info[0], info[1], info[2], info[3]);
}
#endif

// Detect SSE3 support
bool HW_SSE3;
int info[4];
cpuid(info, 0);
int nIds = info[0];
if (nIds >= 0x00000001){
    cpuid(info,0x00000001);
    HW_SSE3   = (info[2] &amp; ((int)1 <<  0)) != 0;
}

以上是提供的程式碼足以檢查 CPU 上的 SSE3 支援嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn