2010-09-24 16 views
14

Estoy trabajando en un código que contiene algunos fragmentos (generados por el compilador) de código ensamblador que hemos identificado como cuellos de botella de velocidad.¿Existen guías buenas, modernas y en línea para la optimización manual del código de ensamblaje?

Conozco lo suficiente sobre ensamblaje para buscar optimizaciones manuales. Sin embargo, me pregunto si hay algunas buenas guías en línea que ofrezcan técnicas reutilizables para su uso en la optimización manual del ensamblaje. Esto no es algo que espero que tenga que hacer muy a menudo, por lo que es probable que tenga que aprender a hacerlo, de nuevo, desde cero, cada vez.

+4

Si usted tiene una arquitectura específica en mente, por favor etiquetar apropiadamente ("x 86" o "brazo" o lo que sea). –

Respuesta

8

http://www.agner.org/optimize/optimizing_assembly.pdf

diría "divertirse", pero probablemente sería muy mezquino :(

I que puede estar interesado en el capítulo 9, "Optimización de la velocidad".

+1

Parece un gran libro. También recomendaría el Capítulo 13 sobre programación de vectores. –

1

Mientras esto podría no necesitar diciendo ...

En general, se va a ir mucho más lejos, ayudando a que el compilador (GCC estoy usando como ejemplo, pero esto debería ser relevante para otros compiladores también):

  • Juega con las opciones del compilador por un tiempo (-march = nativa, -mfpmath = sse, -msse3, -marm, -mthumb)
  • uso información de perfil cuando se puede (-fprofile-generar, -fprofile uso)
  • Modifique el algoritmo para ver qué produce el código "mejor" ((x>>8)&0xFF o (x&0xFF00)>>8? Es una instrucción en PPC, pero el compilador puede usar dos)
  • Modifique su algoritmo para que utilice mejor la memoria caché.
  • Use vector extensions si su compilador los admite. Su compilador puede tener target-specific builtins adicional (x86, ARM NEON).
  • usuarios un compilador (RVCT para ARM, CPI para x86)

Me sorprendería si usted podría obtener más de un 20% la velocidad a lo largo de un compilador de C decente, a menos que haya instrucciones específicas/características que el compilador no está usando. Y el 20% rara vez vale la pena escribir a casa a menos que sea todo lo que hace su aplicación.

+0

+1 para obtener una buena respuesta y cancelar el downvote injustificado - este es un punto muy importante - es bastante difícil vencer a un * buen * compilador cuando se trata de optimización en CPUs modernas –

Cuestiones relacionadas