Professional Documents
Culture Documents
Tema 7
Optimización de código
1
Javier Vélez Reyes jvelez@lsi.uned.es
Índice General
Introducción
Optimización de código
Criterios de optimización
Obtención de un mayor rendimiento
Estructura de un optimizador de Código intermedio
Transformaciones que preservan la función
Optimización de bucles
Introducción
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.
2
Javier Vélez Reyes jvelez@lsi.uned.es
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 de flujos 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 un programa 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 y ciclos de computo a una
optimización que no suponga mejora significativa
3
Javier Vélez Reyes jvelez@lsi.uned.es
Optimización de código
Obtención de un mayor rendimiento
Aplicar algoritmos a distintos niveles
Código fuente Análisis Léxico
El usuario puede perfilar el
programa, modificar
algoritmos y transformar Análisis Sintáctico
bucles
Código objeto
Optimización de código
El compilador puede usar intermedio
registros, seleccionar
instrucciones o hacer
transformaciones locales
Generación de código
objeto
Optimización de código
Estructura de un optimizador de Código intermedio
3 etapas
Análisis de flujo de
control
Realización de
transformaciones
4
Javier Vélez Reyes jvelez@lsi.uned.es
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
5
Javier Vélez Reyes jvelez@lsi.uned.es
B5 B5
t6 := 4 * i t6 := 4 * i
x := a [t6] x := a [t6]
t7 := 4 * i t8 := 4 * j
t8 := 4 * j t9 := a [t8]
t9 := a [t8] a [t6] := t9
a [t7] := t9 a [t18] := x
t10 := 4 * j goto B2
a [t10] := x
goto B2
a := d + e t := d + e
a := d + e b := d + e a := t b := t
c := d + e c := t
6
Javier Vélez Reyes jvelez@lsi.uned.es
depura := false; i := 0; i := 0;
i++; i++;
If (depura) then
println (‘i = ’, i);
depura := true; i := 0; i := 0;
i++; i++;
If (depura) then println (‘i = ’, i);
println (‘i = ’, i);
t := límite – 2
while ( i <= límite – 2 )
while ( i <= t )
7
Javier Vélez Reyes jvelez@lsi.uned.es
t4 lo hace en 4
If (i > j) goto B6 B4
B5 B6
t6 := 4 * i t11 := 4 * i
x := a [t6] x := a [t11]
t7 := 4 * i t12 := 4 * i
t8 := 4 * j t13 := 4 * n
t9 := a [t8] t14 := a [t13]
a [t7] := t9 a [t12] := t14
t10 := 4 * j t15 := 4 * n
a [t10] := x a [t15] := x
goto B2
i := i + 1 B2
Cuando hay 2 o más t2 := 4 * i
t3 := a [t2]
variables de inducción if (t3 < v) goto B2
dentro de un bucle es
posible suprimirlas todas j := j – 1 B3
t4 := t4 – 4
menos una mediante un t5 := a [t4]
proceso de reducción de if (t5 > v) goto B3
intensidad
If (i > j) goto B6 B4
B5 B6
t6 := 4 * i t11 := 4 * i
x := a [t6] x := a [t11]
t7 := 4 * i t12 := 4 * i
t8 := 4 * j t13 := 4 * n
t9 := a [t8] t14 := a [t13]
a [t7] := t9 a [t12] := t14
t10 := 4 * j t15 := 4 * n
a [t10] := x a [t15] := x
goto B2
8
Javier Vélez Reyes jvelez@lsi.uned.es
Bibliografía