Le code suivant est-il suffisant pour vérifier si un processeur prend en charge le jeu d'instructions 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; }
Malheureusement, l'extrait de code fourni présente une limitation sous Windows XP. Pour surmonter ce problème et garantir une détection précise de la prise en charge de SSE3 sur une gamme plus large de systèmes, une solution plus complète est recommandée.
Vous trouverez ci-dessous une approche qui fournit une détection SSE3 fiable sur Windows XP et d'autres systèmes d'exploitation :
// 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; }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!