"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > L'extrait de code fourni dans la description du problème vérifie-t-il avec précision la prise en charge du jeu d'instructions SSE3?

L'extrait de code fourni dans la description du problème vérifie-t-il avec précision la prise en charge du jeu d'instructions SSE3?

Publié le 2025-03-22
Parcourir:132

Does the Code Snippet Provided in the Problem Description Accurately Check for SSE3 Instruction Set Support?

Comment déterminer la prise en charge du processe Support?

Réponse:

Non, l'extrait de code n'est pas valide pour vérifier la prise en charge de SSE3 sur Windows XP.

Solution:

Voici une méthode plus fiable pour détecter la prise en charge du processeur pour SSE3 et divers autres ensembles d'instructions:

code:

# ifdef _win32 // Windows #Define cpuid (info, x) __cpuidex (info, x, 0) #autre // GCC Intrinsics #include void cpuid (int info [4], int infotype) { __cpuid_count (infotype, 0, info [0], info [1], info [2], info [3]); } #endif // Misc. bool hw_mmx; bool hw_x64; bool hw_abm; // Manipulation de bits avancée bool hw_rdrand; bool hw_bmi1; bool hw_bmi2; bool hw_adx; bool hw_prefetchwt1; // simd: 128 bits bool hw_sse; bool hw_sse2; bool hw_sse3; bool hw_ssse3; bool hw_sse41; bool hw_sse42; bool hw_sse4a; bool hw_aes; bool hw_sha; // simd: 256 bits bool hw_avx; bool hw_xop; bool hw_fma3; bool hw_fma4; bool hw_avx2; // simd: 512 bits bool hw_avx512f; // Fondation AVX512 bool hw_avx512cd; // Détection des conflits AVX512 bool hw_avx512pf; // préfescue AVX512 bool hw_avx512er; // AVX512 exponentiel réciproque bool hw_avx512vl; // Extensions de longueur vectorielle AVX512 bool hw_avx512bw; // mot AVX512 octet bool hw_avx512dq; // quadword à double mots AVX512 bool hw_avx512ifma; // AVX512 entier 52 bits fusionné multiplié bool hw_avx512vbmi; // Instructions de manipulation des octets vectoriels AVX512 int info [4]; cpuid (info, 0); int nids = info [0]; cpuid (info, 0x80000000); Unsigned nexids = info [0]; // détecter les fonctionnalités if (nids> = 0x00000001) { cpuid (info, 0x00000001); Hw_mmx = (info [3] & ((int) 1 = 0x00000007) { cpuid (info, 0x00000007); Hw_avx2 = (info [1] & ((int) 1 = 0x80000001) { cpuid (info, 0x80000001); Hw_x64 = (info [3] & ((int) 1 En utilisant cette méthode, vous pouvez déterminer si un CPU prend en charge l'ensemble d'instructions SSE3 en vérifiant la variable booléenne HW_SSE3 après avoir exécuté le code.

Remarque:

#ifdef _WIN32

//  Windows
#define cpuid(info, x)    __cpuidex(info, x, 0)

#else

//  GCC Intrinsics
#include 

void cpuid(int info[4], int InfoType) {
    __cpuid_count(InfoType, 0, info[0], info[1], info[2], info[3]);
}

#endif

//  Misc.
bool HW_MMX;
bool HW_x64;
bool HW_ABM;      // Advanced Bit Manipulation
bool HW_RDRAND;
bool HW_BMI1;
bool HW_BMI2;
bool HW_ADX;
bool HW_PREFETCHWT1;

//  SIMD: 128-bit
bool HW_SSE;
bool HW_SSE2;
bool HW_SSE3;
bool HW_SSSE3;
bool HW_SSE41;
bool HW_SSE42;
bool HW_SSE4a;
bool HW_AES;
bool HW_SHA;

//  SIMD: 256-bit
bool HW_AVX;
bool HW_XOP;
bool HW_FMA3;
bool HW_FMA4;
bool HW_AVX2;

//  SIMD: 512-bit
bool HW_AVX512F;    //  AVX512 Foundation
bool HW_AVX512CD;   //  AVX512 Conflict Detection
bool HW_AVX512PF;   //  AVX512 Prefetch
bool HW_AVX512ER;   //  AVX512 Exponential   Reciprocal
bool HW_AVX512VL;   //  AVX512 Vector Length Extensions
bool HW_AVX512BW;   //  AVX512 Byte   Word
bool HW_AVX512DQ;   //  AVX512 Doubleword   Quadword
bool HW_AVX512IFMA; //  AVX512 Integer 52-bit Fused Multiply-Add
bool HW_AVX512VBMI; //  AVX512 Vector Byte Manipulation Instructions

int info[4];
cpuid(info, 0);
int nIds = info[0];

cpuid(info, 0x80000000);
unsigned nExIds = info[0];

//  Detect Features
if (nIds >= 0x00000001){
    cpuid(info, 0x00000001);
    HW_MMX    = (info[3] & ((int)1 = 0x00000007){
    cpuid(info, 0x00000007);
    HW_AVX2   = (info[1] & ((int)1 = 0x80000001){
    cpuid(info, 0x80000001);
    HW_x64   = (info[3] & ((int)1  Gardez à l'esprit que la détection du support CPU est un seul aspect. Pour utiliser réellement ces instructions dans votre code, vous devrez peut-être effectuer des ajustements en fonction du langage de programmation spécifique et du système d'exploitation que vous utilisez. 

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3