Optimizacion de codigo
Optimización de código
La optimización del código es un proceso de transformación del código intermedio mediante el cual se consigue mejorar la velocidad de ejecución del mismo y reducir su tamaño.
Es difícil obtener un código eficiente directamente Mediante la optimización se pretende que
El código final ejecutable sea más rápido El código final ocupe menos espacio en memoria(compacto)
Dos tipos de transformaciones
Independientes de la máquina (capítulo 7) Dependientes de la máquina (capítulo 6.III)
Introducción
Optimización de código
Técnicas de transformación
Reunir estadísticas sobre los programas fuente Evaluar la ventaja de un conjunto de optimizaciones Es necesaria una muestra representativa de programas
Una técnica frecuente es el análisis deflujos de datos
Recopilar información sobre el modo en que se usan variables Existen varios algoritmos para recopilar la información Se considera el impacto de construcciones de lenguaje Procedimientos Apuntadores
Optimización de código
Criterios de optimización
Una transformación debe preservar el significado del programa fuente. Una optimización no debe cambiar el resultado producido por unprograma para una entrada dada o causar un error Una transformación debe acelerar los programas en una cantidad mensurable.
A veces las transformaciones van dirigidas a optimizar el tamaño del código. A veces, una optimización podrá ralentizar ligeramente un programa, pero será válida si, en general, mejora los programas
Una transformación debe ser ventajosa. No tiene sentido incluir esfuerzos yciclos de computo a una optimización que no suponga mejora significativa
Optimización de código
Obtención de un mayor rendimiento
Aplicar algoritmos a distintos niveles
Código fuente
El usuario puede perfilar el programa, modificar algoritmos y transformar bucles
Análisis Léxico Análisis Sintáctico Análisis Semántico Generación de código intermedio Optimización de código intermedioGeneración de código objeto
Código intermedio
El compilador puede mejorar los bucles, llamar a procedimientos, calcular direcciones
Código objeto
El compilador puede usar registros, seleccionar instrucciones o hacer transformaciones locales
Optimización de código
Estructura de un optimizador de Código intermedio
3 etapas
Análisis de flujo de control
Análisis de flujo de datosOptimización de código intermedio
Realización de transformaciones
Optimización de código
Estructura de un optimizador de Código intermedio
Características Las operaciones necesarias para implantar construcciones de alto nivel se hacen explícitas en el código intermedio de modo que es posible optimizarlas El código intermedio puede ser independiente de la máquina objeto de modo que el optimizadorno cambia mucho si el generador de código se sustituye Los programas se representan mediante grafos de flujo en el que los nodos indican bloques básicos y las aristas el flujo de control
Principales fuentes para la optimización
Ejemplo
void clasificación (int m, n) { int i, j; int v; if ( n 1 ); do j = j – 1; while ( a [j] > v ); if ( i >= j ) break; x = a [i]; a [i] := a [j]; a [j] = x; }clasificación (m, j); clasificación (i + 1, n); } B5 t6 := 4 * i x := a [t6] t7 := 4 * i t8 := 4 * j t9 := a [t8] a [t7] := t9 t10 := 4 * j a [t10] := x goto B2 i := m – 1 j := ni t1 := 4 * n v := a [t1]
i := i + 1 t2 := 4 * i t3 := a [t2] if (t3 < v) goto B2
B2
j := j -1 t4 := 4 * j t5 := a [t4] if (t5 > v) goto B3 If (i > j) goto B6
B3
B4 B6 t11 := 4 * i x := a [t11] t12 := 4 * it13 := 4 * n t14 := a [t13] a [t12] := t14 t15 := 4 * n a [t15] := x
Principales fuentes para la optimización
Transformaciones que preservan la función
Eliminación de subexpresiones comunes
Una ocurrencia de una expresión E se denomina subexpresión común si E ha sido previamente calculada y los valores de las variables dentro de E no han cambiado desde el cálculo anterior
B5 t6 := 4 * i x...
Regístrate para leer el documento completo.