"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿El fragmento de código proporcionado en la descripción del problema verifica con precisión el soporte de establecimiento de instrucciones SSE3?

¿El fragmento de código proporcionado en la descripción del problema verifica con precisión el soporte de establecimiento de instrucciones SSE3?

Publicado el 2025-03-22
Navegar:670

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

cómo determinar el soporte de CPU para sse3 instrucciones set

pregunta: [&]

es el disipado de código proporcionado en la descripción de la descripción del problema una forma válida de verificar el sse3 establecido soporte?

respuesta:

no, el fragmento de código no es válido para verificar el soporte SSE3 en Windows XP.

Solución:

aquí hay un método más confiable para detectar el soporte de CPU para SSE3 y varias otras instrucciones:

: #ifdef _win32 // Windows #define cpuid (info, x) __cpuidex (info, x, 0) #demás // intrínsecs GCC #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; // manipulación de bits avanzada 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; // Fundación AVX512 bool hw_avx512cd; // Detección de conflictos AVX512 bool hw_avx512pf; // AVX512 Pre -Fetch bool hw_avx512er; // AVX512 Recíproco exponencial bool hw_avx512vl; // extensiones de longitud vectorial AVX512 bool hw_avx512bw; // palabra de byte avx512 bool hw_avx512dq; // AVX512 Doubleword Quadword bool hw_avx512ifma; // AVX512 Integer Integer 52 bit Fused Multiply-Add bool hw_avx512vbmi; // instrucciones de manipulación de bytes vectoriales AVX512 into int [4]; cpuid (info, 0); int nids = info [0]; CPUID (información, 0x80000000); Nexids unsigned = info [0]; // detectar características if (nids> = 0x00000001) { CPUID (información, 0x00000001); Hw_mmx = (info [3] & ((int) 1 = 0x00000007) { CPUID (información, 0x00000007); Hw_avx2 = (info [1] & ((int) 1 = 0x80000001) { CPUID (información, 0x80000001); Hw_x64 = (info [3] & ((int) 1

#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  

nota:

Tenga en cuenta que la detección de CPU es solo un aspecto. Para utilizar realmente estas instrucciones en su código, es posible que deba realizar ajustes basados ​​en el lenguaje de programación y el sistema operativo que está utilizando.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3