PDA

Ver la versión completa : Flags de compilación



bitrider
15/11/2010, 22:12
Bueno, estaba yo a lo mío, vamos con el PocketSNES y tras mil intentos de optimizar ciertas rutinillas de pintado haciendo mil malabares, todos ellos infructuosos, recordé una cosa: el ancho del bus de memoria del procesador de la Wiz y la Caanoo es de 16 bits. Con lo que me dió por reducir una rutina optimizada intentando evitar bucles (y por tanto saltos, que tan mal sientan a los ARMv5) pasando a utilizar 2/8 de la longitud original a costa de usar los tan temidos saltos obtuve un pequeño aumento de rendimiento.

Lo siguiente que se me ocurrió fue pasar de utilizar el switch -O3 (optimizaciones a cascoporro), utilizando en su lugar el -Os (optimizar para reducir el tamaño), con algunos flags adicionales. Quedando mis flags de compilación así:


COPT = -mcpu=arm926ej-s -mtune=arm926ej-s -g -D__WIZ__
COPT += -Os
COPT += -ffast-math -msoft-float
COPT += -finline -finline-functions -fexpensive-optimizations
COPT += -falign-functions=32 -falign-loops -falign-labels
COPT += -falign-jumps
COPT += -fomit-frame-pointer

(antes estaban igual sólo que usando -O3)
El resultado fue bastante bueno, obteniendo en algunos casos mejoras de un 10% a un 20%. En los casos en los que no obtuve mayor rendimiento tampoco obtuve un menor rendimiento apreciable.

Ni que decir tiene que esto no es aplicable a la GP2x original, pues tenía un bus de 32 bits. Pero sí a la Caanoo y a la Wiz.

Todo esto surgió, de una lectura en la que decía que en sistemas ARM con bus de 16 bits se obtenía mayor rendimiento con el modo THUMB, a pesar de su menor número de instrucciones (lo que requería a veces programar rutinas más largas), debido al menor uso de memoria por instrucción de este.

¿Qué flags de compilación utilizáis vosotros?

P.D.: siento la paja mental y el tocho

GameMaster
15/11/2010, 22:29
Grácias por el pequeño relato, me ha encantado leerte, sobretodo has demostrado que todavia me queda mucho que aprender.

hardyx
16/11/2010, 00:00
Yo utilizo los típicos de -march=armv5te -mtune=arm926ej-s -msoft-float -O3, pero es interesante saber lo de optimizar por tamaño. El modo thumb, que tiene su flag -mthumb, compila el programa con instrucciones más sencillas y dicen que es más mucho más rápido. Incluso creo que el emulador de PSX de Zod lo usaba.

jduranmaster
16/11/2010, 08:34
yo suelo usar los mismos flags que ha puesto hardyx. Para la programacion de homebrew en la GBA por ejemplo (que lleva un ARM7) el uso de thumb se nota muchismo en el rendimiento de los programas.

bitrider
18/11/2010, 19:35
Siguiendo con el tema, el profiling no parece llevarse muy bien con el -Os. Así que ahora me toca evaluar qué compensa más: profiling(algo más de rendimiento, requiere más tiempo) o -Os (más compatibilidad, menos tiempo).

romeroca
18/11/2010, 20:37
Bitrider, tus comentarios sobre los flags de compilación me ha despertado el interés por probarlo en otros emuladores.

De momento lo he probado con Uae4all y no he apreciado ningún cambio ni para bien ni para mal.

bitrider
18/11/2010, 22:18
Pues si encuentras cambios favorables indícalo.

Yo al final he descartado el profiling en favor del -Os ya que en las últimas pruebas me da rendimientos similares y me da mucho menos trabajo (No tengo que pasar cada release por el proceso de profiling).