Heim >Backend-Entwicklung >C++ >Reicht der bereitgestellte Code aus, um die SSE3-Unterstützung auf CPUs zu überprüfen?
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; }
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] & ((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!