Documente Academic
Documente Profesional
Documente Cultură
QUE ES LA OPTIMIZACIN?
El objetivo de la optimizacin es mejorar cdigo objeto final, preservando
significado del programa.
TIPOS DE OPTIMIZACIN
En funcin de mbito de la aplicacin: En funcin de la dependencia de la
arquitectura:
Locales
Bucles o ciclos
Globales
Mirilla o Peephole
Independiente de la maquina
Dependiente de la maquina
Caractersticas:
Asignacin de registros, uso de modos de direccionamiento
Uso instrucciones especiales (IDIOMS)
relleno de pipelines, prediccin de saltos, aprovechamiento de estrategias de mem.
cache, etc.
Caractersticas:
Ejecucin en tiempo de compilacin
Eliminacin de redundancias
Cambios de orden de ejecucin, etc.
Transformaciones de cdigo, Anlisis de flujo de control, Tratamiento de bucles.
Introduccin al anlisis de flujo de datos y optimizacin global.
OPTIMIZACIN DE CDIGO
Para que un cdigo pueda considerarse optimizado es necesario que sea
eficiente o mejorarlos en los siguientes aspectos:
Tiempo de ejecucin (optimizacin temporal)
Espacio de memoria utilizado (optimizacin espacial)
Hay que tener muy en cuenta que cuando optimizamos nos modificamos la
funcionalidad del cdigo simplemente lo hacemos mas eficiente en cuanto a
los dos parmetros anteriores.
GRAFO
Es un conjunto de objetos llamados vrtices o nodos unidos por enlaces
llamados aristas o arcos, que permiten representar relaciones binarias entre
elementos de un conjunto
BLOQUE BSICO
Podra decirse que es un nodo del grafo de flujo
Esto es, una serie de instrucciones o sentencias consecutivas que el flujo de
control lo recorre de principio a fin.
Bloque bsico
Ejemplo:
Bloque bsico
EJEMPLOS
BB1:
for (i=1;i<10;++i) {
BB1
i=1;
BB2:
i<10;
b=b+a[i];
BB3:
c=b*i;
b=b+a[i];
c=b*i;
++i
}
BB2
a=3;
BB4:
a=3;
b=4;
goto l1;
b=4;
BB3
BB4
goto l1;
c=10;
BB5:
l1: d=3;
BB6:
c=10;
e=4
BB = Block Basic o Bloque bsico
l1: d=3;
e=4;
OPTIMIZACIONES LOCALES
Las optimizaciones locales solo se realizan sobre bloques bsicos o mdulos
del programa y solo se ven reflejadas ah mismo.
SIMPLIFICACIONES ALGEBRAICAS
x = x +1
x=x*1
x=x*0x=0
y = y ** 2 y = y * y
x = x * 8 x = x<< 3
x = x * 15
t = x << 4; x = t - x
PROPAGACIN DE COPIAS
Esta optimizacin permite al programador utilizar variables como constantes
sin introducir ineficiencias hasta la siguiente asignacin de dicha variable.
a=3+i
f=a
b=f+c
d=a+m
m=f+d
a=3+i
b=a+c
d=a+m
m=a+d
b=z+y
a=b
x=2*a
b=z+y
a=b
x=2*b
Ejemplo:
A=2+3+A+C A=5+A+C
3-(5+6)+4-A*10 -4-(A*10)
Ejemplo:
x=y+z
w=y+z
x=y+z
w=x
b=z+y
b=z+y
a=x
a=b
x=2*b
x=2*a
x=2*b
OPTIMIZACIONES LOCALES
Cada optimizacin hace poco por si misma pero la aplicacin de una permite
la realizacin de otras sucesivamente y as hasta que ya no haya mejoras o el
tiempo limite se haya alcanzado.
c=x
d=c*c
e=b*2
a=x*x
b=3
c=x
d=x*x
e = 3<< 1
f=a+d
g=e*f
Constant Folding
b=3
a=x*x
b=3
c=x
d=c*c
e = b << 1
f=a+d
g=e*f
Propagacin de copia
a = x ** 2
Optimizacin algebraica
a := x * x
f := a + a
g := 6 * f
a=x*x
b=3
c=x
d=a
e=6
f=a+a
g=6*f
Propagacin de copia
g=e*f
Eliminacin de
cdigo
inalcanzable
f=a+d
Cdigo final
a=x*x
b=3
c=x
d=x*x
e=6
f=a+d
g=e*f
a=x*x
b=3
c=x
d=a
e=6
f=a+d
g=e*f
EXPANSIN DE BUCLES
Solo se puede aplicar a los bucles cuyo nmero de iteraciones se conoce en
tiempo de compilacin.
Ejemplo:
For (I=0; I < 4; I++)
a(I) = 0;
A(0)
A(1)
A(2)
A(3)
=
=
=
=
0;
0;
0;
0;
REDUCCIN DE FRECUENCIA
Detecta las operaciones invariantes de bucle y las calcula una nica vez
delante del bucle.
Ejemplo:
i=1
L1:
t1 = sin(a)
t2 = i * t1
c = t2;
i = i+1
If i < n go to L1
i=1
t1 = sin(a)
L1:
t2 = i * t1
c = t2;
i = i+1
If i < n go to L1
Operacin invariante
REDUCCIN DE POTENCIA
Consiste en sustituir productos entre variables inductivas e invariantes de bucle
por sumas.
Ejemplo:
for(i=1; i<10;++i) a[i]=3*i;
for(i=1,j=3;i<10;++i,j+=3) a[i]=j;
OPTIMIZACIN GLOBAL
Corresponde a la optimizacin global, es decir, de todo el grafo de flujo
de ejecucin, con respecto a todo el cdigo.
x=3
y=z*w
y =z *w
y=z *w
q=x+y
q=3+y
q=3+y
OPTIMIZACIN GLOBAL
Dentro de las optimizaciones globales tambin aplican las siguientes:
Identificacin de expresiones comunes entre bloques
Afecta a la asignacin de registros entre bloque bsicos.
Optimizacin de bucles
OPTIMIZACIN 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.
OPTIMIZACIN DE MIRILLA
La optimizacin de mirilla intenta rehacer el cdigo de manera mas eficiente
mediante:
Cargas y almacenamientos redundantes.
Cdigo inalcanzable.
Optimizaciones de flujo y de control
Eliminacin de instrucciones intiles.
Utilizacin de expresiones especificas
Reacondicionamiento de instrucciones.
CDIGO INALCANZABLE
Se puede eliminar una instruccin sin etiqueta que siga inmediatamente a un
salto incondicional
REACONDICIONAMIENTO DE INSTRUCCIONES
Antes
Despus
a = b * c * (d + e)
a = (d + e) * b * c
LOAD B
LOAD D
t1 = b * c
MUL C
t1:=d + e
ADD E
t2 = d + e
STA T1
t2:=b * c
MUL B
t3 = t1 * t2
LOAD D
t3:=t2*c
MUL C
ADD E
MUL T1
STA A
STA A
COSTOS
Los costos son el factor ms importante a tomar en cuenta a la hora de
optimizar ya que en ocasiones la mejora obtenida puede verse no reflejada
en el programa final pero si ser perjudicial para el equipo de desarrollo.
La optimizacin de una pequea mejora tal vez tenga una pequea ganancia
en tiempo o en espacio pero sale muy costosa en tiempo en generarla.
COSTOS DE EJECUCIN
Los costos de ejecucin son aquellos que vienen implcitos al ejecutar el
programa. En algunos programas se tiene un mnimo para ejecutar el
programa, por lo que el espacio y la velocidad de los microprocesadores son
elementos que se deben optimizar para tener un mercado potencial ms
amplio.