Beruflich Dokumente
Kultur Dokumente
Estrategias de
optimizacin
Optimizacin de cdigo
intermedio y cdigo objeto
Javier Vlez Reyes
jvelez@lsi.uned.es
Departamento de Lenguajes Y Sistemas Informticos
UNED
Objetivos
Entender que es la optimizacin de cdigo
Entender que son las transformaciones y qu tipos existen
Aprender las fases en las que pueden aplicarse transformaciones de cdigo
Estudiar las principales transformaciones independientes del entorno de ejecucin
Conocer el mbito de aplicacin de estas transformaciones (locales vs. globales)
Conocer los tipos de transformaciones independientes del entorno
Aquellas que preservan la estructura del grafo/bloque
Aquellas que no preservan la estructura del grafo/bloque
Estudiar las principales transformaciones dependientes del entorno de ejecucin
Aprender a medir el coste de ejecucin de un programa
Aprender a seleccionar instrucciones para la traduccin a cdigo final
Aprender a seleccionar direccionamientos para la traduccin a cdigo final
Adquirir una actitud crtica sobre las tcnicas de optimizacin de cdigo intermedio y final
ndice
Introduccin
Transformaciones independientes del entorno de ejecucin
Grafos de flujo, bloques bsicos y DGA
Transformaciones que preservan la estructura
Transformaciones que no preservan la estructura
Transformaciones dependientes del entorno de ejecucin
Seleccin de instrucciones para la traduccin
Seleccin del lugar de almacenamiento para la traduccin
Bibliografa
Qu es la optimizacin de cdigo?
La generacin de cdigo, tpicamente realizada en 2 fases a travs del cdigo intermedio, provoca
frecuentemente cdigo ejecutable que aunque correcto resulta torpe y poco eficiente desde el punto de
vista del tamao o del tiempo que tarda ste en ejecutarse. Esto suele ser debido a que el alcance de
visibilidad del compilador en estas fases es a nivel de cudrupla. Conviene as, aplicar ciertas
estrategias de optimizacin sobre el cdigo resultante
La optimizacin del cdigo es el proceso mediante el cual se aplican ciertas
transformaciones de cdigo para conseguir que un programa ejecutable sea ms eficiente
en tiempo de ejecucin y / o compacto en memoria
Sabiendo que
x := y + z
traduce
MV
MV
ADD
MV
t0
t1
t2
x
y
z
t0 t1
t2
Entonces
a := b + c traduce
d := a + e
MV
MV
ADD
MV
MV
MV
ADD
MV
t0
t1
t2
a
t3
t4
t5
d
Tr. #1
b
c
t0 t1
t2
a
e
t3 t4
t5
MV
MV
ADD
MV
MV
ADD
MV
t0
t1
t2
a
t4
t5
d
Tr. #2
b
c
t0 t1
t2
e
t2 t4
t5
MV
MV
ADD
MV
MV
ADD
MV
t0
t1
t2
a
t0
t1
d
b
c
t0 t1
t2
e
t2 t0
t1
III. Aplicabilidad
Una transformacin realizada sobre
un determinado cdigo debe ser
ante todo aplicable como tcnica de
mejora dentro del compilador. Esto
implica que el orden de complejidad
de su aplicacin no debe ser muy
superior al propio del proceso de
compilacin
Objetivos de las
transformaciones
de cdigo
Foco de atencin
Estrategias de
seleccin de
transformaciones
de cdigo
Foco de atencin
En algunos lenguajes
como C o C++ las
directivas de compilacin
se resuelven a nivel de
cdigo fuente transformando este es una
versin simplificada y
ms optima del mismo
En la mayora de los
lenguajes la incorporacin y propagacin
de constantes ser
realizan en la fase de
anlisis sintcticos
E > E
WHILE
Algunos
lenguajes
generan errores de
cdigo
inalcanzable
detectable en esta fase
para evitar que el
espacio en memoria y
tiempo de la ejecucin
sea mayor del necesario
DO
E > E
LD a t1
LD b t2
GRT t3 t1 t2
BRZ t3 L1
Tras la generacin de
cdigo
intermedio
se
obtiene una representacin
del programa que permite
hacer un anlisis de
transformaciones
independientes del entorno de
ejecucin
0000 0011
0000 0011
0100 0001
0100 0000
0001 0010
DO
Cdigo intermedio
WHILE
Analizador semntico
Analizador sintctico
<WHILE, PR>
Analizador lxico
eli hw
Cdigo final
While ( a > b ) do
a := a + 1;
Tras la generacin de
cdigo final se aplican
transformaciones que van
dirigidas a mejorar la
calidad teniendo en cuenta
los recursos y prestaciones
del entorno de ejecucin
Tipos de
transformaciones
de cdigo
MV
MV
r 1
i 1
E1: CMP i 5
BZF E2
B0
Mtodo de construccin
B1
MV
MV
MUL
MV
MV
MV
ADD
MV
BR
E2: HALT
t0 r
t1 i
t2 t0 t1
r t2
t3 i
t4 1
t5 t3 t4
i t5
E1
B2
Se incluye el lder
B4
MV
MV
r 1
i 1
B0
E1: CMP i 5
BZF E2
B1
MV
MV
MUL
MV
MV
MV
ADD
MV
BR
B2
E2: HALT
t0 r
t1 i
t2 t0 t1
r t2
t3 i
t4 1
t5 t3 t4
i t5
E1
Transformaciones globales
B4
Transformaciones locales
Las transformaciones locales, o transformaciones
a nivel de bloque, consisten en rescrituras de las
cudruplas de un bloque dirigidas a mejorar la
calidad del mismo. Este tipo de transformaciones
suelen ser de sencillas puesto que su mbito de
aplicacin est confinado a un pequeo grupo de
instrucciones sin interferencias del resto de
bloques
c
d
b
d
Bn
a
b
c
d
+
- [b, d]
[a]
[c]
ADD
SUB
ADD
SUB
Catlogo de transformaciones
Independientemente del alcance local o global que tengan las transformaciones de optimizacin, es
posible dividir las mismas en dos grandes grupos segn repercutan en el grafo de flujo que representa
el subprograma sometido a anlisis de optimizacin. De esta manera es posible establecer el siguiente
catlogo de transformaciones independientes del entorno de ejecucin que utilizaremos de ndice de
referencia durante el resto de la seccin
No alteran la
estructura
del grafo de
flujo
Preservan
estructura
Transformaciones locales
Transformaciones globales
-Propagacin de copias
Alteran la
estructura
del grafo de
flujo
No preservan
estructura
III
-Transformaciones algebraicas
-Traslado de cdigo
-Reduccin de la intensidad
-Propagacin de constantes
II
IV
- [b, d]
+
b
ADD
SUB
ADD
SUB
a
b
c
d
b
a
d
a
+ [a]
[a]
c
c
d
b
d
Bn
ADD
SUB
ADD
MV
a
b
c
d
b c
a d
d b
b
Bn
ADD
SUB
SUB
ADD
a
b
c
e
- [b]
c
b
b
c
b
c
d
d
c
Bn
+ [c]
d
SUB b b d
SUB c c d
ADD e b c
Bn
Dos
cudruplas
independientes
pueden
intercambiar su orden de ejecucin sin que eso
afecte al resultado final de la ejecucin. Hay que
comprobar que la segunda cudrupla no
contiene por operandos el resultado calculado
por la primera
+ [t2, a]
t1
t0
+ [e]
t3
+ [a]
b
MV
MV
ADD
MV
MV
ADD
MV
c
t0
t1
t2
a
t3
t4
d
b
c
t0 t1
t2
e
t2 t3
t4
Bn
+ [c]
- [b]
MV
MV
ADD
MV
MV
ADD
MV
t0
t1
t2
a
t7
t8
d
b
c
t0 t1
t2
e
t2 t7
t8
Bn
b
ADD
SUB
SUB
ADD
a
b
c
e
c
b
b
c
b
c
d
d
c
Bn
d
ADD
SUB
SUB
ADD
a
c
b
e
b
c
b
b
c
d
d
c
Bn
Reduccin de la intensidad
:=
:=
:=
:=
x
x
1
x
+
*
/
0 := 0 + x
0
x := x * 1
1
a
b
MV a b
+ [a]
b
Propagacin de constantes
ADD a b 0
*
2
[a]
x
MUL a x 2
+
x
[a]
x
ADD a x x
[t0]
3
MUL t0 2 3
ADD t1 t0 5
MV a t1
a
5
11
MV a 11
Propagacin de copias
Es posible eliminar cudruplas de reasignacin
de la forma MV x y por propagacin del valor de
y en todas las ocurrencias futuras de x
...
MV a b c
...
B1
...
MV a b c
...
B1
...
ADD e b c
ADD f 2 e
...
Bn
...
MV e a
ADD f 2 e
...
Bn
...
ADD a b c
...
B1
...
MV e a
ADD f 2 e
...
Bn
...
MV a b c
...
B1
...
ADD f 2 a
...
Bn
B1
LS t0 u v
BRT E1 t0
B2
B3
E1: MV i 2
INC u
DEC v
EQ t1 v 20
B4
MV i 1
MV i 2
B1
LS t0 u v
BRT E1 t0
B2
MV i n
B1
INC i
MUL t0 i 4
...
Bn
MV i n
MUL t0 4 i
B1
INC i
ADD t0 t0 4
...
Bn
B3
E1: INC u
DEC v
EQ t1 v 20
B4
Tipos de
transformaciones
dependientes del
entorno de
ejecucin
Arquitecturas VAX
Las arquitecturas VAX tienen una
instruccin especifica de incrementocomparacin-ramificacin para dar
soporte gil a la implementacin de
bucles
Arquitecturas RISC
Las arquitecturas RISC (Reduced
Instruction Set Computer) disponen
de 1 juego reducido de instrucciones
muy giles donde solo operaciones
de carga y almacenamiento tienen
direccionamiento a memoria
Ejemplo
MOVE .R0 a
ADD .R0 #1
MOVE a .R0
ADD a 1
INC a
Coste
#1
.R3
/1000
[.R3]
#3[.IX] #5[.IY]
$3
0
0
1
1
1
1
Inmediato
Directo a registro
Directo a memoria
Indirecto
Relativa a Reg. ndice
Relativo a PC
Ejemplo
Direccionamiento
La
estrategia
de
seleccin
de
direccionamientos para almacenar los
objetos de datos va dirigida por buscar
direccionamientos de coste 0 (registros)
frente a direccionamientos de mayor coste
(memoria). En este sentido el nmero de
registros de la mquina tiene un impacto
directo en el tiempo de ejecucin
concreto
dentro
del
tiempo
de
ejecucin
Descriptor de memoria
Los descriptores de memoria indican las
posiciones de memoria o registros donde cada
objeto se encuentra almacenado cada objeto
de datos en un momento determinado dentro
del tiempo de ejecucin. Naturalmente un
objeto puede estar en dos o ms posiciones
distintas
[x, c]
[a, b]
1
Descriptor de memoria
[t4]
==
- [x, t3]
x
Ejemplo
C. Intermedio
E: MUL
MV
SUB
MV
EQ
BRF
t2
f
t3
x
t4
E
f x
t2
x 1
t3
x 0
C. Intermedio
E: MUL
MV
SUB
MV
EQ
BRF
t2
f
t3
x
t4
E
C. Final
f x
t2
x 1
t3
x 0
C. Final
E: MOVE .R0 /1001
MOVE .R1 /1000
MUL .R0 .R1
D. Memoria
D. Registro
x
f
t2
t3
t4
1
0
.R0
.R1
.R2
.R3
.R4
.R5
/1000
/1001
#1
#0
D. Memoria
D. Registro
x
f
t2
t3
t4
1
0
.R0
.R1
.R2
.R3
.R4
.R5
/1000, .R1
/1001
.R0
#1
#0
f, t2
x
-
[t4]
==
- [x, t3]
x
Ejemplo
C. Intermedio
E: MUL
MV
SUB
MV
EQ
BRF
t2
f
t3
x
t4
E
f x
t2
x 1
t3
x 0
C. Intermedio
E: MUL
MV
SUB
MV
EQ
BRF
t2
f
t3
x
t4
E
f x
t2
x 1
t3
x 0
C. Final
E: MOVE
MOVE
MUL
MOVE
SUB
.R0
.R1
.R0
.R2
.R1
/1001
/1000
.R1
#1
.R2
C. Final
E: MOVE
MOVE
MUL
MOVE
SUB
MOVE
CMP
BZ
.R0
.R1
.R0
.R2
.R1
.R3
.R1
E
/1001
/1000
.R1
#1
.R2
#0
.R3
D. Memoria
D. Registro
x
f
t2
t3
t4
1
0
.R0
.R1
.R2
.R3
.R4
.R5
/1000, .R1
/1001
.R0
.R1
#1
#0
f, t2
x, t3
1
-
D. Memoria
D. Registro
x
f
t2
t3
t4
1
0
.R0
.R1
.R2
.R3
.R4
.R5
/1000, .R1
/1001
.R0
.R1
#1
#0
f, t2
x, t3
1
0
-
Material de estudio
Bibliografa bsica
Construccin de compiladores: principios y prctica
Kenneth C. Louden International Thomson Editores,
2004 ISBN 970-686-299-4
Material de estudio
Bibliografa complementaria
Compiladores: Principios, tcnicas y herramientas.
Segunda Edicin Aho, Lam, Sethi, Ullman
Addison Wesley, Pearson Educacin, Mxico 2008