Maison >développement back-end >C++ >Le code fourni est-il suffisant pour vérifier la prise en charge de SSE3 sur les processeurs ?

Le code fourni est-il suffisant pour vérifier la prise en charge de SSE3 sur les processeurs ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-16 16:53:03417parcourir

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

Vérification de la prise en charge de SSE3 sur les processeurs

La question

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

La réponse

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] &amp; ((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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn