Estoy desarrollando una aplicación de rendimiento crítico para el procesador Intel Atom.Indicadores de optimización de GCC para Intel Atom
¿Cuáles son los mejores indicadores de optimización de gcc para esta CPU?
Estoy desarrollando una aplicación de rendimiento crítico para el procesador Intel Atom.Indicadores de optimización de GCC para Intel Atom
¿Cuáles son los mejores indicadores de optimización de gcc para esta CPU?
GCC 4.5 contendrá las opciones -march = atom y -mtune = atom.
Hay un marco genial llamado Acovea (Analysis of Compiler Options via Evolutionary Algorithm), por 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 así: que escribir una pequeña pieza de código de referencia (que realmente tiene que ser pequeña, porque va a ser re-compilado y ejecutado varios miles de veces) que representa las características de rendimiento del programa más amplio quieres 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.
El enlace no funciona – Max
@Max: Parece que Scott dejó de trabajar en él. –
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 adición muy significativa de MMX/SSE/SSE2/SSE3/Conjuntos de instrucciones SSSE3. Por supuesto, estos solo hacen una diferencia significativa si su código es de coma flotante o pesados en DSP.
Tal vez usted podría intentar:
gcc -O2 -march = pentium -mmmx -msse -msse2 -msse3 -mssse3 -mfpmath = sse
Mientras que el Atom es comparable al Pentium en que es una arquitectura en orden, la estructura de la tubería es muy diferente, y la programación de las instrucciones para el Pentium probablemente sería bastante mala para el rendimiento. – user57368
De acuerdo, usted * no * quiere usar -march = pentium para nada que no sea un Pentium real. – kquinn
Al igual que para Pentium 4:
-march=prescott -O2 -pipe -fomit-frame-pointer
Bueno, los estados wiki de Gentoo para el Prescott:
http://en.gentoo-wiki.com/wiki/Safe_Cflags/Intel#Atom_N270
CHOST = "i686-pc-linux-gnu"
CFLAGS = "- march = Prescott -O2 -pipe -fomit-frame-pointer"
CXXFLAGS = "$ {CFLAGS}"
No por más tiempo: http://en.gentoo-wiki.com/wiki/Safe_Cflags/Intel#Atom_N270.2FN280 (enlace actualizado) ahora recomienda CFLAGS = "- O2 = -march Core2 -mtune = genérica -mssse3 -mfpmath = sse -fomit-frame-pointer -pipe" –
... y CFLAGS = "- O2 -march = átomo de -mssse3 -mfpmath = sse -fomit-frame-pointer -pipe" para GCC 4.5 –
Tengo un script que selecciona automáticamente los indicadores apropiados para la combinación de tu CPU y compilador. acabo de ser informado que soporte Intel Atom:
http://www.pixelbeat.org/scripts/gcccpuopt
Actualización: anteriormente he especificado -march = phoenix Atom, pero mirando más en él muestra que Atom es compatible merom ISA, 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, probablemente sea mejor que también sintonice = pentium. Lamentablemente no tengo un átomo para probar.Realmente agradecería si alguien pudiera comparar el diff 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 de Atom:
no creo que el establecimiento tanto '-march = core2' y' -mtune = pentium' funciona en absoluto: obtengo 'arg.c: 1: error: la CPU que ha seleccionado no soporta instrucciones x86-64 set' – moo
interesante. ¿Su átomo es compatible con 64 bits? Si prueba la secuencia de comandos anterior probablemente le diga que también agregue -m32 – pixelbeat
sí, mi átomo admite 64 bits. – moo
aquí hay algunos polinización cruzada de blogs ... lo que realmente esperaba era un benc compilado para el átomo de firefox hmark ...
Dirección: http: // ivoras.sharanet.org/blog/tree/2009-02-11.optimizing-for-atom.html
"Como resultado, parece gcc haga 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 las matemáticas, pero incluso se destruyen mediante la afinación de pentium4.
"La diferencia entre el más rápido y la optimización más lenta es del 21%. El impacto de la utilización de marzo en lugar de mtune es insignificante (diferencia no es suficiente para decir si ayuda o no).
" (he incluido k6 solo como referencia - Sé que Atom no tiene 3dnow)
"Actualización tardía: el ajuste de k8 (con SSE y O3) arroja un mejor puntaje ligeramente superior de 182."
de Intel, Getting Started with MID
cuando se utiliza gcc para compilar, hay algunas banderas recomienda utilizar:
i686 es el más cercano. No vaya por core2.
GCC 4.1 -O3 -march = i686 GCC 4.3 -O3 -march = nativa
GCC 4.1 -O4 -ffast-matemáticas GCC 4.3 -O4 -ffast-matemáticas
http://macles.blogspot.com/2008/09/intel-cc-compiler-gcc-and-intel-atom.html
-O4 no es un nivel de optimización de gcc válido. Lea manuales no blogs: http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Optimize-Options.html –
¿Qué pasa con el compilador Intel C (CPI)? Al menos en los puntos de referencia que vienen con esto, la dominación sobre gcc es bastante notable ...
Cuando use GCC 4.5 también querrá usar -fexcess-precision = fast (vea http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42376 para más detalles) –