2012-06-16 17 views
9

Estoy trabajando en las optimizaciones del rendimiento del código ARM C/C++, compilado con GCC. La CPU es Tegra 3. Como sé banderas -mthumb significa generar viejas instrucciones de Thumb de 16 bits. En diferentes pruebas, tengo un 10-15% de aumento en el rendimiento con -marmo contra -mthumb.GCC -mthumb contra -marm

¿Se usa -mthumb solo para compatibilidad y rendimiento? ¿El mazo es mejor siempre? Lo estoy preguntando, porque android-cmake usó -mthumb en modo Release y -marm en Debug, eso es muy confuso para mí.

Respuesta

21

El pulgar no es el conjunto de instrucciones anterior, pero de hecho el más nuevo. La revisión actual es Thumb-2, que es un conjunto mixto de instrucciones de 16/32 bits. El conjunto de instrucciones Thumb1 era una versión comprimida del conjunto de instrucciones ARM original. La CPU tomaría la instrucción, la descomprimiría en ARM y luego la procesaría. En estos días (ARMv7 y superior), Thumb-2 es preferible para todo menos para el rendimiento crítico o el código del sistema. Por ejemplo, GCC generará Thumb2 por defecto para ARMv7 (como su Tegra3), ya que la mayor densidad de código proporcionada por el ISA de 16/32 bits permite una mejor utilización de icache. Pero esto es algo que es muy difícil de medir en un punto de referencia normal, porque la mayoría de los puntos de referencia cabrán en el L1 icache de todos modos.

Para más información consultar el sitio Wikipedia: http://en.wikipedia.org/wiki/ARM_architecture#Thumb

+1

excelente respuesta. El Gameboy Advance tiene principalmente 16 bit, no cero estado de espera, los buses de datos y el rendimiento del pulgar era mucho mejor que ARM. el pulgar requiere más instrucciones que el brazo, por lo que es más lento en ese sentido. thumb2 es una extensión para pulgar, todavía tiene las instrucciones de pulgar, thumb2 utiliza las indefinidas anteriormente y muchas son instrucciones de 32 bits. –

+0

Good nutshell Preguntas y respuestas – tniles09