Heim >Backend-Entwicklung >C++ >Reicht der bereitgestellte Code aus, um die SSE3-Unterstützung auf CPUs zu überprüfen?

Reicht der bereitgestellte Code aus, um die SSE3-Unterstützung auf CPUs zu überprüfen?

Susan Sarandon
Susan SarandonOriginal
2024-11-16 16:53:03408Durchsuche

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

Überprüfen der SSE3-Unterstützung auf CPUs

Die Frage

Ist der folgende Code ausreichend, um zu überprüfen, ob eine CPU den SSE3-Befehlssatz unterstützt?

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

Die Antwort

Leider weist das bereitgestellte Code-Snippet unter Windows XP eine Einschränkung auf. Um dies zu überwinden und eine genaue Erkennung der SSE3-Unterstützung auf einem breiteren Spektrum von Systemen sicherzustellen, wird eine umfassendere Lösung empfohlen.

Im Folgenden finden Sie einen Ansatz, der eine zuverlässige SSE3-Erkennung sowohl auf Windows XP als auch auf anderen Betriebssystemen ermöglicht:

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

Das obige ist der detaillierte Inhalt vonReicht der bereitgestellte Code aus, um die SSE3-Unterstützung auf CPUs zu überprüfen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn