Вы находитесь на странице: 1из 18

Funcionamiento de optimizacin

Revisa el cdigo generado a varios


niveles de abstraccin y realiza las
optimizaciones aplicables al nivel de
abstraccin. Representaciones de cdigo
intermedio de ms a menos abstractas

3.1 Tipos de Optimizacin


rea del programa donde se aplica
Local
Ciclos
Globales
De mirilla

3.1.1 Optimizacin Local


Es la forma ms simple de optimizacin
No se necesita analizar el cuerpo del
procedimiento completo.
Slo el bloque bsico que se esta tratando
de optimizar.

Cada optimizacin local hace un poco por si


mismo la optimizacin en compiladores se
realiza de forma repetida hasta que no sea
posible mejorar. El optimizador se puede
parar en cualquier momento para limitar el
tiempo de compilacin

Las optimizaciones locales se realizan sobre el


bloque bsico
Optimizaciones locales
Folding
Propagacin de constantes
Reduccin de potencia
Reduccin de sub-expresiones comunes

Bloque bsico
Un bloque bsico es un fragmento de cdigo que
tiene una nica entrada y salida, y cuyas
instrucciones se ejecutan secuencialmente.
La idea del bloque bsico es encontrar partes del
programa

cuyo

anlisis

necesario

optimizacin sea lo ms simple posible.

para

la

Ejemplo

Flujo de Control Grfico


Bloques bsicos en un programa puede ser representado
por medio de grficos de flujo de control. Un flujo de control
grfico se muestra cmo el control del programa se pasa
entre los bloques. Es una herramienta til que ayuda en la
optimizacin por ayudar a localizar cualquier bucles no
deseados en el programa.

Folding
El ensamblamiento es reemplazar las
expresiones por su resultado cuando se
pueden evaluar en tiempo de compilacin
(resultado constante).
Ejemplo: Se aade el procesamiento de las constantes a las
reglas de anlisis de expresiones.

A=2+3+A+C -> A=5+A+C


2+3+b -> 5+b

Ejemplo de Folding
B*5+8-(3+2)+9
TERMINOS
B*5
+8
-3
-2
+9
TERMINOS CONSTANTES:
+8-3-2+9=12
RESULTADO:
(B*5)+12

((a-(3*((2+5)-3)))+(b/(63))).

Propagacin de constantes
Desde que se asigna a una variable un valor constante hasta la
siguiente asignacin, se considera a la variable equivalente a la
constante.
Ejemplo: Propagacin Ensamblamiento
PI=3.14
G2R=PI/180 -> G2R=3.14/180 -> G2R=0.017
PI y G2R se consideran constantes hasta la prxima asignacin.
Estas optimizaciones permiten que el programador utilice
variables como constantes sin introducir ineficiencias. Por
ejemplo en C no hay constantes y ser lo mismo utilizar
Int a=10;
#define a 10
Con la ventaja que la variable puede ser local.
Actualmente en C se puede definir const int a=10;

3.1.2 Ciclos
Los programas pasan la mayor parte del tiempo en
ciclos, mientras menos instrucciones tengan, ms
rpido ejecutan cualquier expresin cuyo valor es
independiente de la cantidad de veces que se
ejecute el ciclo es una invariante del ciclo.

Tcnica de desenvolvimiento de ciclos


Es una tcnica de optimizacin de bucles que intenta mejorar la velocidad de
ejecucin de un programa a costa de aumentar su tamao binario (Situacin
de compromiso espacio-tiempo). Esta transformacin puede hacerla
manualmente el programador o un Compilador optimizador.
El objetivo del desenvolvimiento de bucles es incrementar la velocidad del
programa al reducir (o eliminar) instrucciones que controlan el bucle, como
aritmtica de punteros o la verificacin de final de bucle en cada iteracin
reduciendo la penalizacin por ramificacin adems de ocultar latencias, en
particular, la espera de la lectura de datos de memoria. Para eliminar esta
sobrecarga en la computacin, los bucles pueden ser re-escritos como una
repeticin de sentencias similares independientes.

3.1.3 Globales
La optimizacin global se da con respecto a todo el cdigo.
Este tipo de optimizacin es ms lenta pero mejora el
desempeo general de todo programa. Las optimizaciones
globales pueden depender de la arquitectura de la mquina.
La optimizacin global a partir del anlisis del grafo del flujo
de ejecucin permite.
Problema: la optimizacin global es muy costosa en tiempo
de compilacin.
En algunos casos es mejor mantener variables globales para
agilizar los procesos (el proceso de declarar variables y
eliminarlas toma su tiempo) pero consume ms memoria.
Algunas optimizaciones incluyen utilizar como variables
registros del CPU, utilizar instrucciones en ensamblador

3.1.4 De Mirilla
La optimizacin de mirilla trata de
estructurar de manera eficiente el flujo del
programa, sobre todo en instrucciones de
bifurcacin como son las decisiones, ciclos
y saltos de rutinas.
La idea es tener los saltos lo ms cerca de
las llamadas, siendo el salto lo ms
pequeo posible.

Вам также может понравиться