Você está na página 1de 9

qwertyuiopasdfghjklzxcvbnmqw

ertyuiopasdfghjklzxcvbnmqwert
yuiopasdfghjklzxcvbnmqwertyui
opasdfghjklzxcvbnmqwertyuiop
Optimizacin de Cdigo Intermedio
Unidad 3
asdfghjklzxcvbnmqwertyuiopas
dfghjklzxcvbnmqwertyuiopasdf
ghjklzxcvbnmqwertyuiopasdfgh
jklzxcvbnmqwertyuiopasdfghjkl
zxcvbnmqwertyuiopasdfghjklzx
cvbnmqwertyuiopasdfghjklzxcv
bnmqwertyuiopasdfghjklzxcvbn
mqwertyuiopasdfghjklzxcvbnm
qwertyuiopasdfghjklzxcvbnmqw
ertyuiopasdfghjklzxcvbnmqwert
yuiopasdfghjklzxcvbnmqwertyui
opasdfghjklzxcvbnmqwertyuiop
asdfghjklzxcvbnmrtyuiopasdfgh
Jimnez Viana Israel Enrique

Optimizacin de Cdigo Intermedio


Puesto que estadsticamente sabemos que un programa utiliza el 90% del tiempo de ejecucin
en el 10% del cdigo, las tcnicas de optimizacin se basan en un amplio anlisis de la
estructura del programa y del flujo de datos, y subdividen el programa en regiones de
optimizacin. El anlisis del flujo de control intenta encontrar este 10% de cdigo para poderlo
optimizar sin demasiado coste de proceso.
En este sentido, las tcnicas de mejora se pueden aplicar en dos mbitos:
Local, si slo utiliza informacin de un bloque bsico (por ejemplo, un bucle).
Global, si utiliza informacin de un conjunto de bloques bsicos.
Optimizacin genrica
Una vez se ha generado el cdigo intermedio, se pueden realizar una serie de optimizaciones
genricas, que permiten eliminar instrucciones intiles o simplificar expresiones, obteniendo as
un cdigo ms pequeo y rpido de ejecutar. La optimizacin en esta fase se compone tanto de
optimizaciones locales como globales.
Posicin del optimizador y del generador de cdigo:

Cdigo intermedio
Programa objeto
Programa fuente
Etapa inicial
Optimador de Cdigo
cdigo intermedio
Generador de cdigo

Tabla de smbolos

Bloques bsicos
El paso previo a cualquier optimizacin es la divisin del programa en bloques bsicos. Un
bloque bsico es un conjunto de instrucciones de programa que se ejecutan de forma
consecutiva sin posibilidad de salto.
Por tanto, los bloques bsicos del programa sern aquellos fragmentos de cdigo cuyas
instrucciones no sean saltos, ni el destino de un salto. La excepcin es la ltima instruccin de
cada bloque bsico, que s puede (debe) ser un salto. La primera instruccin de un bloque bsico
se denomina como lder, y ser el punto de entrada al bloque.
Los tipos de optimizaciones sobre bloques bsicos se conocen como optimizaciones locales.
Hacer mejoras sobre bloques bsicos permite una optimizacin en los fragmentos, lo cual es
ms eficiente que una optimizacin en lnea de cdigo y menos complejo que una optimizacin
global.

Esta estructuracin permite visualizar el flujo del programa como un grafo, como muestra el
siguiente ejemplo:

Op
timizaciones locales
Las optimizaciones locales, o de ventana, son aquellas que se efectan dentro de un bloque
bsico. Algunas de ellas son:

Optimizaciones Locales

Aplican sobre un bloque bsico aislado del resto.


Las introdujimos en nuestro estudio de generacin de cdigo.
Aplicables tanto a cdigo intermedio como a cdigo final y quieres tenerlas en ambos
niveles.

Optimizaciones Globales

Aplican sobre todo el programa, explotando las relaciones entre varios bloques bsicos
simultneamente.
Son dirigidas por Anlisis de Flujo de Datos (Data FlowAnalysis).
Aplicables tanto a cdigo intermedio como a cdigo final
En general se aplican agresivamente al intermedio.

Tipos Optimizacin
La optimizacin va a depender del lenguaje de programacin y es directamente proporcional al
tiempo de compilacin; es decir, entre ms optimizacin mayor tiempo de compilacin.
Las optimizaciones pueden realizarse de diferentes formas. Las optimizaciones se realizan en
base al alcance ofrecido por el compilador de programacin y es directamente proporcional al
tiempo de compilacin; es decir, entre ms optimizacin mayor tiempo de compilacin.
Como el tiempo de optimizacin es gran consumidor de tiempo (dado que tiene que recorrer
todo el rbol de posibles soluciones para el proceso de optimizacin) la optimizacin se deja
hasta la fase de prueba final.

Algunos editores ofrecen una versin de depuracin y otra de entrega o final.


La optimizacin es un proceso que tiene a minimizar o maximizar alguna variable de
rendimiento, generalmente tiempo, espacio, procesador, etc.
Desafortunadamente no existen optimizador que hagan un programa ms rpido y que ocupe
menor espacio.
La optimizacin se realiza reestructurando el cdigo de tal forma que el nuevo cdigo generado
tenga mayores beneficios. La mayora de los compiladores tienen una optimizacin baja, se
necesita de compiladores especiales para realmente optimizar el cdigo.

Locales Optimizacin
La optimizacin local sirve cuando un bloque de programa o seccin es crtico por ejemplo: la
E/S, la concurrencia, la rapidez y confiabilidad de un conjunto de instrucciones.
Como el espacio de soluciones es ms pequeo la optimizacin local es ms rpida.
Bucles Optimizacin
Los ciclos son una de las partes ms esenciales en el rendimiento de un programa dado que
realizan acciones repetitivas, y si dichas acciones estn mal realizadas, el problema se hace N
veces ms grandes.
La mayora de las optimizaciones sobre ciclos tratan de encontrar elementos que no deben
repetirse en un ciclo.
while(a == b)
{ int c = a; c = 5; ; }
En este caso es mejor pasar el int c =a; fuera del ciclo de ser posible.
El problema de la optimizacin en ciclos y en generalradica es que muy difcil saber el uso
exacto de algunas instrucciones. Asque no todo cdigo de proceso puede ser optimizado. Otros
uso de la optimizacin pueden ser el mejoramiento de consultas en SQL o en aplicaciones
remotas (sockets, E/S, etc.)
Globales Optimizacin
Variables y eliminarlas toma su tiempo) pero consume ms memoria.
Algunas optimizaciones incluyen utilizar como variables registros del CPU, utilizar instrucciones
en ensamblador.
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.
La idea es tener los saltos lo ms cerca de las llamadas, siendo el salto lo ms pequeo
posible.
Costos Optimizacin
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 finalpero 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.
Pero en cambio si esa optimizacin se hace por ejemplo en un ciclo, la mejora obtenida puede
ser N veces mayor por lo cual el costo se minimiza y es benfico la mejora.
Por ejemplo: for(int i=0; i< 10000; i++); si la ganancia es de 30 ms 300s.
Costo de Ejecucin Optimizacin
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.
Las aplicaciones multimedios como los videojuegos tienen un costo de ejecucin alto por lo cual
la optimizacin de su desempeo es crtico, la gran mayora de las veces requieren de
procesadores rpidos (e.g. tarjetas de video) o de mucha memoria.
Otro tipo de aplicaciones que deben optimizarse son las aplicaciones para dispositivos mviles.
Los dispositivos mviles tiene recursos ms limitados que un dispositivo de cmputo
convencional razn por la cual, el mejor uso de memoria y otros recursos de hardware tiene
mayor rendimiento.
En algunos casos es preferible tener la lgica del negocio ms fuerte en otros dispositivos y
hacer uso de arquitecturas descentralizadas como cliente/servidor o P2P.
Criterios para Mejorar 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 Anlisis del Flujo de Datos
Existen algunas herramientas que permiten el anlisis de los flujos de datos, entre ellas
tenemos los depuradores y des ambladores.
La optimizacin al igual que la programacin es un arte y no se ha podido sistematizar del todo.

Ejemplo de Optimizacin de Cdigo


Cdigo inicial
a:= x**2
b:=3
c:=x
d:=c*c
e:=b*2
f:=a+d
g:=e*f
Reduccin de constantes:
a:= x*x
b:=3
c:=x
d:=x*x
e:=6
f:=a+d
g:=e*f

Eliminacin de cdigo
muerto
a:= x*x
f:=a+a
g:=6*f
Esta es la forma final

Optimizacin algebraica:
a:= x*x
b:=3
c:=x
d:=c*c
e:=b+b
f:=a+d
g:=e*f

Propagacin de copia:
a:= x*x
b:=3
c:=x
d:=x*x
e:=3+3
f:=a+d
g:=e*f

Eliminacin de sub
expresiones comunes
a:= x*x
b:=3
c:=x
d:=a
e:=6
f:=a+d
g:=e*f

Propagacin de copias
a:= x*x
b:=3
c:=x
d:=a
e:=6
f:=a+a
g:=6*f

Conclusin
Los objetivos principales de la optimizacin de cdigo son reducir el tamao de un programa,
aumentar la velocidad de ejecucin de un programa o ambos. Aunque en realidad no existe
garanta alguna de que despus de la optimizacin el cdigo que resulta de esta sea ptimo.
Para la generacin de cdigo, es acertado producir como salida un programa en lenguaje
ensamblador ya que se pueden generar instrucciones simblicas y utilizar las macros del
ensamblador, adems de que es muy til si se tiene una mquina con memoria pequea.
La calidad del cdigo generado viene determinada por su velocidad y tamao. Las velocidades
de las instrucciones son necesarias para disear nuevas secuencias de cdigo pero no es
sencillo obtener informacin exacta de los tiempos de ejecucin.

Você também pode gostar