optimizacion de codigo
1
Optimización de Código. Procesadores de Lenguaje II
Optimización de Código
Introducción, criterios
Tipos: independiente/dependiente, local/global
Optimización independiente de la máquina
Transformaciones del código
Análisis de flujo de control
Tratamiento de bucles
Introducción al análisis de flujo de datos y optimización
global
Optimizacióndependiente de la máquina
Optimización de mirilla
Asignación de registros
2
1
Optimización de Código. Procesadores de Lenguaje II
Optimización de Código
Fase cara y difícil
Hay que establecer criterios para que no sea más
costosa que la propia ejecución (aunque puede
justificarse si se va a ejecutar el mismo programa
muchas veces)
Criterios para las transformaciones
Lastransformaciones deben preservar el significado de los
programas
Una transformación debe acelerar los programas en una
cantidad mensurable
Una transformación debe valer la pena
3
Optimización de Código. Procesadores de Lenguaje II
Optimización de Código
Obtener código que se ejecuta mas
eficientemente según los criterios de:
Tiempo de ejecución (optimización temporal)
Espacio de memoria utilizado(optimización espacial)
¿Dónde?
¿Cómo?
¿Cuánto?
4
2
Optimización de Código. Procesadores de Lenguaje II
Generación de código y optimización
¿Dónde?
Generación de código
Mientras se analiza el programa
“Libre del contexto”
Optimización de código
Después de la generación de código de todo el programa o de
un elemento ejecutable de este (función, procedimiento, etc.)“Dependiente del contexto”
Regla 90/10
En general el 90% del tiempo de ejecución de un programa es
consumido por el 10% del código
La optimización debe ser aplicada sobre ese 10%. Estimación
“conservadora” del comportamiento del programa
5
Optimización de Código. Procesadores de Lenguaje II
Funcionamiento
¿Cómo?
Revisa el código generado a varios niveles de abstracción y aplicatransformaciones según nivel de abstracción
Representaciones de código intermedio de más a menos abstractas
Árbol sintáctico abstracto
Optimizar subexpresiones redundantes, eliminar código inalcanzable,
reducción de coste, etc.
Tuplas o cuadruplas
Optimizar el uso de registros o de las variables temporales
Ensamblador/Código máquina
Convertir saltos a saltos cortos
Reordenar instruccionesde código máquina
Utilizar instrucciones específicas
Utilización de estructuras de datos ad hoc
Grafos de flujo de ejecución, gráficos dirigidos acíclicos
6
3
Optimización de Código. Procesadores de Lenguaje II
Reglas de oro de la optimización
¿Cuánto?
“La optimización prematura es la raíz de todo mal”
Donald Knuth
Puede introducir errores nuevos y sutiles
Hace el código másdifícil de entender y mantener
Regla de oro
Mantener el código correcto, después si es realmente
necesario entonces optimizarlo
La mejor y más importante forma de optimizar un
programa es usando buenos algoritmos
Por ejemplo: O(n*log) en lugar de O(n2)
Cuidado: la complejidad asintótica no siempre es una métrica
adecuada.
7
Optimización de Código. Procesadores de Lenguaje IITipos de optimización
Momento de la compilación
Independiente de máquina
Transformaciones en código intermedio: Reducción de coste, expresiones
comunes, propagación de constantes, …
Dependiente de máquina
Asignación de registros
Ordenación/selección de instrucciones
Área del programa donde se aplica
1. Local
Reducción de potencia
Folding
Propagación de constantes
2.Global
Análisis del grafo del flujo de control. Bucles
Reducción de frecuencia y potencia
Análisis del grafo del flujo de datos. Extensión de transformaciones
3. Interprocedural
La mayoría de compiladores hacen (1), muchos (2) y pocos (3)
8
4
Optimización de Código. Procesadores de Lenguaje II
Fases de la optimización
Cambiar Algoritmos
Mejorar bucles
Hacer perfiles de...
Regístrate para leer el documento completo.