Pregunta

La serie v4 del compilador gcc puede vectorizar bucles automáticamente utilizando el procesador SIMD en algunas CPU modernas, como los chips AMD Athlon o Intel Pentium / Core. ¿Cómo se hace esto?

¿Fue útil?

Solución

La página original ofrece detalles sobre cómo obtener gcc para vectorizar automáticamente bucles, incluidos algunos ejemplos:

http://gcc.gnu.org/projects/tree-ssa /vectorization.html

Si bien los ejemplos son excelentes, resulta que la sintaxis para llamar a esas opciones con el último GCC parece haber cambiado un poco, vea ahora:

En resumen, las siguientes opciones funcionarán para chips x86 con SSE2, dando un registro de bucles que se han vectorizado:

gcc -O2 -ftree-vectorize -msse2 -ftree-vectorizer-verbose=5

Tenga en cuenta que -msse también es una posibilidad, pero solo vectorizará bucles usando flotadores, no dobles o ints.

Otros consejos

Hay un pase de gimple (una representación intermedia de GCC) pass_vectorize. Este pase permitirá la vectorización automática a nivel de gimple.

Para habilitar la autovectorización (GCC V4.4.0), debemos seguir los siguientes pasos:

  1. Mencione el número de palabras en un vector según la arquitectura de destino. Esto se puede hacer definiendo la macro UNITS_PER_SIMD_WORD.
  2. Los modos de vector que son posibles deben definirse en un archivo separado generalmente <target>-modes.def. Este archivo tiene que residir en el directorio donde residen otros archivos que contienen las descripciones de la máquina. (Según la secuencia de comandos de configuración. Si puede cambiar la secuencia de comandos, puede colocar el archivo en el directorio que desee).
  3. Los modos que se deben considerar para la vectorización según la arquitectura de destino. Al igual, 4 palabras constituirán un vector u ocho medias palabras constituirán un vector o dos palabras dobles constituirán un vector. Los detalles de esto deben mencionarse en el archivo VECTOR_MODES (INT, 8);     /*       V8QI V4HI V2SI /
    VECTOR_MODES (INT, 16);    /
    V16QI V8HI V4SI V2DI /
    VECTOR_MODES (FLOAT, 8);   /
               V4HF V2SF */
    . Por ejemplo:

    -O2 -ftree-vectorize

  4. Construye el puerto. La vectorización se puede habilitar usando las opciones de línea de comando <=>.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top