2011-08-24 26 views
6

Tengo un procesador Xeon W3550 que se supone que tiene soporte para el conjunto de instrucciones SSE4.2 pero cuando intento usar algo más allá de SSE2 en mi programa c, aparece un error de compilación, p.No se puede usar SSSE3 en la CPU habilitada

#error "SSE4.2 instruction set not enabled" 

Cuando uso

$cat /procs/cpuinfo 

detecta todos los conjuntos de instrucciones SSE pertinentes, pero

$cpuid 

sólo detecta SSE y SSE2.

Mi sistema operativo es Ubuntu 11.04 con kernel 2.6.38-11-generic.

¿Alguna idea sobre cómo solucionar esto? Gracias.

EDITAR: Una actualización basada en el comentario de Steve-o a continuación. Los archivos de encabezado < * mmintrin.h> realizan una comprobación de la versión de sse a la que están asociados mediante el uso de la directiva #ifndef preprocessor, p.

#ifndef __SSSE3__ 
#error "SSSE3 instruction set not enabled". 

así que supongo que la pregunta es ¿por qué se esta volviendo falsa a pesar de la CPU que se SSSE3 habilitado.

+0

Suena como una limitación del CCG, compilación de instrucciones no se limita a la plataforma anfitrión o arquitectura. Solo notaría el límite del procesador en tiempo de ejecución, con un fallo seg o similar. –

Respuesta

11

¿Has intentado crear con -msse4.2?

  • El soporte para las funciones integradas SSE4.2 y la generación de código son disponibles a través de -msse4.2.
  • Tanto SSE4.1 como SSE4.2 se pueden habilitar a través de -msse4.

http://gcc.gnu.org/gcc-4.3/changes.html

+1

No, no lo hice. Esto funcionó perfectamente y mi código ahora se está compilando y ejecutándose exitosamente usando comandos SSE3, ¡gracias! – NGaffney

+1

También hay '-march = native' que habilitará las cosas en función de lo que admita tu CPU. – caf

Cuestiones relacionadas