Sunteți pe pagina 1din 35

OPTIMIZACIN

QUE ES LA OPTIMIZACIN?
El objetivo de la optimizacin es mejorar cdigo objeto final, preservando
significado del programa.

Es decir, realizar un serie de transformaciones al cdigo intermedio para


obtener un mejor rendimiento en cuanto a velocidad de ejecucin entre otros
parmetros. Aqu aplica que entre menos cdigo basura o innecesaria se
tenga mas rpido funcionara nuestro 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

OPTIMIZACIN DEPENDIENTE DE LA MAQUINA


La optimizacin independiente de la maquina aprovecha caractersticas
especificas de cada equipo o maquina objetivo.

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.

OPTIMIZACIN INDEPENDIENTE DE LA MAQUINA


La optimizacin independiente de la maquina son aplicables en cualquier tipo
de maquina objetivo o equipo.

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.

OPTIMIZACIONES EN FUNCIN DEL MBITO DE LA


APLICACIN
En lo que respecta a los temas de la unidad 3 de la materia de lenguajes y
autmatas 2 se observaran con mas detalle las optimizaciones en funcin del
mbito de la aplicacin.

Tambin cabe decir que las optimizaciones de mirilla o Peephole y las de


bucle o ciclo son optimizaciones de tipo global. Mas adelante se explicara
con detalle las caractersticas de cada uno de estos tipos de optimizacin
para su mayor comprensin.

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

Un arco es un salto hacia un bloque

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.

Entre las diferentes optimizaciones locales encontramos:


Simplificaciones algebraicas
Propagacin de copias y constantes.
Constant folding
Eliminacin de subexpreciones redundantes o comunes.
Eliminacin de cdigo incansable

SIMPLIFICACIONES ALGEBRAICAS

Son sentencias que pueden eliminarse o


simplificarse.

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

CONSTANT FOLDING (ENSAMBLAMIENTO)


Consiste en remplazar las expresiones por su resultado cuando se pueden
evaluar en tiempo de compilacin. Las propiedades conmutativas y
asociativas tambin pueden usarse.

Ejemplo:
A=2+3+A+C A=5+A+C
3-(5+6)+4-A*10 -4-(A*10)

ELIMINACIN DE SUBEXPRECIONES REDUNDANTES


O COMUNES.
Aqu se usan las subexpreciones que aparecen mas de una vez para
calcularlas solo una vez y reutilizar ese resultado.

Ejemplo:
x=y+z
w=y+z

x=y+z

w=x

ELIMINACIN DE CDIGO INALCANZABLE


Los cdigos inalcanzables son cdigos de bloques bsicos que no son destino
de ningn salto y por lo tanto pueden eliminarse.

Ejemplo con propagacin de copias:


x = z + y

b=z+y

b=z+y

a=x

a=b

x=2*b

x=2*a

x=2*b

En el ultimo ejemplo observamos que al sustituir x por b y proseguir al final la


lnea a = b ya no tenia sentido tenerla por que x = 2 * b acceder
directamente a b = z + y sin tener que hacer uso de ninguna otra igualacin.

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

EJEMPLO DE SECUENCIA DE OPTIMIZACIONES

Eliminar subexprecion comn

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

OPTIMIZACIN DE BUCLES O CICLOS


La optimizacin de bucles es muy importante por las mejoras en tiempo de
ejecucin que se obtienen. La idea es centrar la optimizacin en las partes
mas usadas y no en todo el programa.

Existen diferentes estrategias de optimizacin dentro de bucles (local o


global):
Expansin de bucles (loop unrolling)
Reduccin de frecuencia (Frequency reduction)
Reduccin de potencia (strenght reduction)

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.

Esta optimizacin es muy lenta pero mejora el desempeo general de todo el


programa.

Es necesario crear el grafo de flujo de ejecucin de todo el cdigo ya que


este nos permite una mejor comprensin de las instrucciones y manejo de
datos dentro del cdigo.

EJEMPLO OPTIMIZACIN GLOBAL


x=3

x=3

y=z*w

y =z *w

y=z *w

q=x+y

q=3+y

q=3+y

Ya que x = 3 corresponde a fuera del bloque bsico o nodo del grafo


simplemente aplicando teora de las optimizaciones locales para esta que es
global.

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 llamadas a procedimientos


Cambios del mbito de referencias
Gestin de Registros de Activacin
Paso de parmetros + asignacin de datos locales

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.

Mirilla significa secuencia corta de instrucciones objeto.


Y la idea es sustituir estas instrucciones por instrucciones mas cortas o rpidas.

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.

CARGAS Y ALMACENAMIENTOS REDUNDANTES.


(1) MOV R0,a
(2) MOV a, R0

Se elimina (2) ya que est garantizado que con (1) el


valor de a est en el registro R0 (siempre que no haya
saltos a (2))

CDIGO INALCANZABLE
Se puede eliminar una instruccin sin etiqueta que siga inmediatamente a un
salto incondicional

OPTIMIZACIONES DE FLUJO Y DE CONTROL


Estos son saltos hacia saltos o saltos hacia saltos condicionales.

ELIMINACIN DE INSTRUCCIONES INTILES


a=a*1
b=b+0

UTILIZACIN DE EXPRESIONES ESPECIFICAS


a = a + 1 inc a

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.

CRITERIOS PARA MEJORAR EL CDIGO

La mejor manera de optimizar el cdigo es hacer ver a los programadores que


optimicen su cdigo desde el inicio, el problema radica en que el costo podra ser
muy grande ya que tendra que codificar ms y/o hacer su cdigo ms legible.

Los criterios de optimizacin siempre estn definidos por el compilador. Muchos de


estos criterios pueden modificarse con directivas del compilador desde el cdigo o
de manera externa. Este proceso lo realizan algunas herramientas del sistema como
los ofuscadores para cdigo mvil y cdigo para dispositivos mviles.

HERRAMIENTAS PARA EL ANLISIS DEL FLUJO DE


DATOS
Existen algunas herramientas que permiten el anlisis de los flujos de datos,
entre ellas tenemos los depuradores y desambladores.

La optimizacin al igual que la programacin es un arte y no se ha podido


sistematizar del todo.

S-ar putea să vă placă și