Generación de código AVX/SSE optimizado con icc/gcc

Find AI Tools
No difficulty
No complicated process
Find ai tools

Generación de código AVX/SSE optimizado con icc/gcc

Hola, hoy voy a realizar algunas experimentaciones sin despliegue de datos y he instalado dos compiladores: primero, el GCC 4.7.2 y luego, uno propietario de Intel. Ambos son muy similares. Tengo un ejecutable llamado Veck, que quiero compilar, así que lo hago con make. Este programa está compuesto por archivos C y ensamblador. El objetivo de esto es examinar el código ensamblador generado. He puesto las partes aburridas en el archivo principal y las interesantes en el archivo C. Tengo una regla 's' aquí que genera versiones de Intel y GCC. Ambos provienen del archivo veck.c. Empezamos con el archivo principal, que contiene la función V_FOR_ADD y los argumentos ERASE. 'Restrict' significa que la memoria de los arrays no se superpone. La definición y las fuentes no se superponen. El 'const' significa que s1 y s2 no serán modificados por la función V_FOR_ADD. Todo esto es una pista para el compilador. Defino tres arrays de doubles: ABC. 'Attribute aligned' significa que el inicio de los arrays debe tener una alineación de 32 bytes. Esto también tiene que ver con el código ensamblador, ya que se ejecuta más rápido si está alineado en una potencia de dos. A continuación, hay una función de inicio que inicializa los arrays A y B a algún valor y luego llama a V_FOR_ADD. Implementé esto aquí para poder usar la misma sintaxis para ambos compiladores. Esta macro 'Assume aligned' le indica al compilador que los tres inputs de DST, s1 y s2 están alineados en límites de 32 bytes. Luego, hay un bucle 'for' donde el destino es igual a la suma de source1 y source2. En la primera iteración, el contador de índice será 0. El valor de DST en 0 se establece en s1 en 0 + s2 en 0, y en la siguiente iteración, será 1 y así sucesivamente. Ahora veamos qué código ensamblador se genera. Si ejecutamos make s en ambos, aquí están todos los flags. Se utiliza el archivo stub.s y se generan los ensambladores. Aquí se informa que se vectorizó el bucle en la línea 16. También se informa en jesus.s. La línea 16 es este bucle y se vectorizó. Veamos el código de GCC. ¿Qué hace? Si recuerdas las reglas V_FOR_ADD...

Are you spending too much time looking for ai tools?
App rating
4.9
AI Tools
100k+
Trusted Users
5000+
WHY YOU SHOULD CHOOSE TOOLIFY

TOOLIFY is the best ai tool source.