skylake safe optimization gcc intel-atom

optimization - safe - gentoo skylake



Indicadores de optimización de GCC para Intel Atom (10)

¿Qué pasa con el compilador Intel C (icc)? Al menos en los puntos de referencia que vienen con él, la dominación sobre gcc es bastante notable ...

Estoy desarrollando una aplicación de rendimiento crítico para el procesador Intel Atom.

¿Cuáles son los mejores indicadores de optimización de gcc para esta CPU?


Al igual que para Pentium 4:

-march=prescott -O2 -pipe -fomit-frame-pointer



De Intel, Comenzando con MID

Cuando se usa GCC para compilar, hay algunos indicadores recomendados para usar:

  • -O2 o -O1: indicador O2 optimiza la velocidad, mientras que el indicador -O1 optimiza para tamaño
  • -msse3
  • -march = core2
  • -mfpmath = sse


Hay un marco genial llamado Acovea (Análisis de las Opciones del Compilador a través del Algoritmo Evolutivo) , de Scott Rober Ladd, uno de los hackers de GCC. Es un marco de algoritmo genético / evolutivo que trata de optimizar los indicadores de optimización de GCC para una pieza específica de código a través de la selección natural.

Funciona de la siguiente manera: escribes un pequeño fragmento de código de referencia ( realmente tiene que ser pequeño, porque se volverá a compilar y ejecutar miles de veces) que representa las características de rendimiento del programa más grande que deseas optimizar. Entonces, Acovea construye al azar algunas docenas de líneas de comando de GCC diferentes y compila y ejecuta su punto de referencia con cada uno de ellos. Lo mejor de estas líneas de comando se les permite "aparearse" y "criar" nuevos "hijos" que (con suerte) heredan los mejores "genes" de sus "padres". Este proceso se repite por un par de docenas de "generaciones", hasta que emerge un conjunto estable de banderas de línea de comando.


No sé si GCC todavía tiene indicadores de optimización específicos de Atom, pero se supone que el núcleo Atom es muy similar al Pentium original, con la suma muy significativa de los conjuntos de instrucciones MMX / SSE / SSE2 / SSE3 / SSSE3. Por supuesto, estos solo hacen una diferencia significativa si su código es de coma flotante o pesados ​​en DSP.

Tal vez podrías intentar:

gcc -O2 -march = pentium -mmmx -msse -msse2 -msse3 -mssse3 -mfpmath = sse


Tengo un script que selecciona automáticamente los indicadores apropiados para la combinación de tu CPU y compilador. Acabo de actualizarlo para que sea compatible con Intel Atom:

http://www.pixelbeat.org/scripts/gcccpuopt

Actualización: anteriormente especifiqué -march = prescott para Atom, pero al mirar más en él se muestra que Atom cumple con ISA Merom, por lo tanto, -march = core2 es más apropiado. Sin embargo, tenga en cuenta que los átomos son núcleos en orden, el último de los cuales es el pentium original. Por lo tanto, es probable que sea mejor -mtune = pentium también. Desafortunadamente no tengo un Atom para probar. Realmente apreciaría si alguien pudiera comparar la diferencia entre:

-march=core2 -mfpmath=sse -O3 -march=core2 -mtune=pentium -mfpmath=sse -O3

Actualización: Aquí hay un par de buenos artículos sobre la optimización de bajo nivel para Atom:


aquí hay algunos polinización cruzada de blogs ... lo que realmente esperaba era un punto de referencia de Firefox compilado por átomo ...

Dirección: http: // ivoras.sharanet.org/blog/tree/2009-02-11.optimizing-for-atom.html

"Al parecer, gcc parece hacer un trabajo muy decente con -mtune = native, y mtune = generic es más que aceptable. Las mayores ganancias (en este punto de referencia matemático pesado) provienen del uso de SSE para matemáticas, pero incluso ellos se destruyen mediante la afinación de pentium4.

"La diferencia entre la optimización más rápida y la más lenta es del 21%. El impacto de usar march en lugar de mtune es insignificante (no hay diferencia suficiente para saber si ayuda o no).

"(He incluido k6 solo como referencia, sé que Atom no tiene 3dnow)

"Actualización tardía: el ajuste para k8 (con SSE y O3) arroja un mejor puntaje ligeramente superior de 182".