2012-05-21 16 views
16

Para las opciones de GCC CFLAGS: -msse, -msse2, -mssse3, -msse4, -msse4.1, -msse4.2. ¿Son exclusivos en su uso o pueden usarse juntos?¿Cuál es la diferencia entre las opciones de cflgs sse de -msse, -msse2, -mssse3, -msse4 rtc ..? y cómo determinarlo?

Según tengo entendido, la elección que se establece depende de si el arco de destino, en el que se ejecutará el programa, lo admite o no, ¿es correcto?

En caso afirmativo, ¿cómo podría saber qué sse admite mi arco de destino? En Linux, yo cat/proc/cpuinfo, pero ¿y si Mac o Windows?

Gracias!

+0

Las instrucciones de SSE se han mejorado/modificado durante varias generaciones de CPU. compilar para un objetivo 4.2 evita el uso del código generado en las generaciones anteriores. –

+0

gracias por la primera respuesta. Entonces, ¿qué debería elegir? solo el último (¿es -msse4.2)? – yaya

+0

A menos que tenga un requisito SIMD específico, simplemente compile para el mínimo común denominador, es decir, omita los conmutadores -msse. –

Respuesta

27

El conmutador -m se puede usar en paralelo, y algunos de ellos están implicados en la arquitectura u otros conmutadores. Por ejemplo, si crea código para x86_64, -msse -msse2 siempre está habilitado.

Para el código destinado a ejecutarse en su sistema, debe elegir -march=native, que seleccionará lo que está disponible en su procesador. Por ejemplo, si tiene un Sandy Bridge, esto habilitará -msse -msse2 -msse3 -mssse3 -msse4 -msse4.1 -msse4.2 -mavx.

Si desea especificar en detalle qué conjunto de instrucciones utilizar, solo debe usar lo que está disponible, no siempre lo "último". El "último" es actualmente -mavx2, que no recomiendo: el primer procesador que lo admitirá estará disponible en 2013.

+0

¿Cuál es el punto de 'msse4'? Por lo que puedo decir, es lo mismo que 'msse4.2'. Tal vez crea una macro '__SSE4__'? Parece que solo causa confusión. –

+0

@Zboson No sé cuál es el punto. Debería preguntar eso en la lista de correo de gcc, de hecho no hay ninguna diferencia (¿todavía?). Puede verificarlo con algo como 'gcc -dM -E -msse4.2 - 1; gcc -dM -E -msse4 - 2; diff 1 2' – hirschhornsalz

Cuestiones relacionadas