Determinar el apoyo procesador para SSE2?
-
18-09-2019 - |
Pregunta
Necesito hacer determinar el apoyo procesador para SSE2 instalación antes de un software. Por lo que sé, se me ocurrió esto:
bool TestSSE2(char * szErrorMsg)
{
__try
{
__asm
{
xorpd xmm0, xmm0 // executing SSE2 instruction
}
}
#pragma warning (suppress: 6320)
__except (EXCEPTION_EXECUTE_HANDLER)
{
if (_exception_code() == STATUS_ILLEGAL_INSTRUCTION)
{
_tcscpy_s(szErrorMsg,MSGSIZE, _T("Streaming SIMD Extensions 2(SSE2) is not supported by the CPU.\r\n Unable to launch APP"));
return false;
}
_tcscpy_s(szErrorMsg,MSGSIZE, _T("Streaming SIMD Extensions 2(SSE2) is not supported by the CPU.\r\n Unable to launch APP"));
return false;
}
return true;
}
Que este trabajo? No estoy muy seguro de cómo poner a prueba, ya que mi CPU es compatible con él, así que no entiendo falsa de la llamada a la función.
¿Cómo determino soporte de procesadores para SSE2?
Solución
Llamada CPUID con eax = 1 para cargar los señalizadores de característica para EDX. El bit 26 se establece si SSE2 está disponible. Algo de código para fines de demostración, utilizando MSVC ++ ensamblaje en línea (sólo para x86 y no portátil!):
inline unsigned int get_cpu_feature_flags()
{
unsigned int features;
__asm
{
// Save registers
push eax
push ebx
push ecx
push edx
// Get the feature flags (eax=1) from edx
mov eax, 1
cpuid
mov features, edx
// Restore registers
pop edx
pop ecx
pop ebx
pop eax
}
return features;
}
// Bit 26 for SSE2 support
static const bool cpu_supports_sse2 = (cpu_feature_flags & 0x04000000)!=0;
Otros consejos
Me pareció que éste era por accidente en el MSDN :
BOOL sse2supported = ::IsProcessorFeaturePresent( PF_XMMI64_INSTRUCTIONS_AVAILABLE );
sólo para Windows, pero si usted no está interesado en nada multiplataforma, muy simple.
La forma más sencilla de comprobar si hay SSE2 es mediante el uso de la instrucción CPUID
(en plataformas donde está disponible). Ya sea usando ensamblado en línea o usando intrínsecos del compilador.
Puede utilizar la función _cpuid. Todo se explica en la MSDN .