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
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