Beruflich Dokumente
Kultur Dokumente
- INTRODUCCION
Idealmente, los compiladores deberan producir cdigo objeto que fuera tan bueno como si
estuviera escrito directamente por un buen programador. La realidad es que esto es dificil de
conseguir y muy pocas veces se alcanza esa meta.
Sin embargo, el cdigo generado por el compilador puede ser mejorado por medio de unas
transformaciones que se han denominado tradicionalmente optimizaciones, aunque el trmino
optimizacin es impropio ya que raramente se consigue que el cdigo generado sea el mejor
posible.
El objetivo de las tcnicas de optimizacin es mejorar el programa objeto para que nos d un
rendimiento mayor. La mayora de estas tcnicas vienen a compensar ciertas ineficiencias que
aparecen en el lenguaje fuente, ineficiencias que son inherentes al concepto de lenguaje de alto
nivel, el cual suprime detalles de la mquina objeto para facilitar la tarea de implementar un
algoritmo. Las distintas tcnicas de optimizacin se pueden clasificar o dividir de diversas formas.
Por una parte podemos hablar de aquellas tcnicas que son dependientes de la mquina, y
aquellas que son independientes de la mquina (o sea, tcnicas que slo se pueden aplicar a una
determinada mquina objeto y tcnicas que son aplicables a cualquier mquina objeto).
Por otra parte, las tcnicas de optimizacin se dividen tambin en locales y globales. Las tcnicas
de optimizacin locales analizarn slo pequeas porciones de cdigo y en ellas realizarn
mejoras, mientras que para la aplicacin de las tcnicas globales ser necesario el anlisis de todo
el cdigo.
Cada optimizacin est basada en una funcin de coste y en una transformacin que preserve el
significado del programa. Mediante la funcin de coste queremos evaluar la mejora que hemos
obtenido con esa optimizacin y si compensa con el esfuerzo que el compilador realiza para poder
llevarla a cabo.
Los criterios ms comunes que se suelen emplear son el ahorro en el tamao del cdigo, la
reduccin del tiempo de ejecucin y la mejora de las necesidades del espacio para los datos del
programa.
En cuanto a preservar el significado del programa, es lgico que no tendra sentido realizar
optimizaciones que modificaran el comportamiento del programa. Aunque parezca evidente,
puede haber complicadas optimizaciones que fallen en ese aspecto.
Por ltimo, comentar que por muchas optimizaciones que se hayan realizado para mejorar el
rendimiento de un programa, siempre se obtendr un mejor rendimiento si se utiliza un algoritmo
mejor.
Por todo ello, para obtener un buen programa lo primero es ver qu algoritmo utilizamos y si no es
posible desarrollar otro ms eficiente. Una vez implementado el mejor algoritmo, ya se puede
entonces optimizar el cdigo obtenido a partir de l para mejorar el rendimiento del programa.
OPTIMIZACIN
Las optimizaciones pueden realizarse de diferentes formas. Las optimizaciones se realizan en base
al alcance ofrecido por el compilador. 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. 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 optimizadores 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.
Existen diversas tcnicas de optimizacin que se aplican al cdigo generado para un programa
sencillo. Por programa sencillo entendemos aquel que se reduce a un slo procedimiento o
subrutina. Las tcnicas de optimizacin a travs de varios procedimientos se reducen a aplicar las
vistas aqu a cada uno de los procedimientos y despus realizar un anlisis interprocedural.
Este ltimo tipo de anlisis no lo vamos a desarrollar en este artculo. Partiendo de un programa
sencillo, obtenemos cdigo intermedio de tres direcciones [AHO77], pues es una representacin
adecuada del programa sobre la que emplear las diversas tcnicas de optimizacin.
Las sentencias de un bloque bsico constituyen una unidad sobre la cual se aplican las
optimizaciones locales. Estas optimizaciones se pueden dividir en:
Son:
b) Transformaciones algebraicas.
Son aquellas transformaciones que simplifican expresiones y/o reemplazan operaciones costosas
de la mquina por otras menos costosas. Adems de este tipo de optimizaciones locales a un
bloque bsico, existe otro tipo de optimizaciones an ms locales, pues su mbito se reduce a una
breve secuencia de instrucciones.
3. Simpificaciones algebraicas.
Las tcnicas de optimizacin global se basan todos ellos en el anlisis global de flujo de datos. Este
anlisis se realiza para el cdigo de todo el programa, es decir, a lo largo de los distintos bloques
bsicos que forman el cdigo del programa. Suponiendo que tenemos la informacin que nos
proporciona este anlisis, que lo veremos en el siguiente apartado, hay dos tipos de
optimizaciones importantes que se realizan:
la localizacin y la asignacin global de registros para las variables, y las optimizaciones que se
realizan en los bucles.Las optimizaciones pueden realizarse de diferentes formas. Las
optimizaciones se realizan en base al alcance ofrecido por el compilador.
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. Desafortunamente 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.
3.1.1 LOCALES
La optimizacin local se realiza sobre mdulos del programa. En la mayora de las ocasiones a
travs de funciones, mtodos, procedimientos, clases, etc. La caracterstica de las optimizaciones
locales es que slo se ven reflejados en dichas secciones.
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
Las caractersticas de las optimizaciones locales es que solo se ven reflejados en dichas secciones.
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.
Optimizaciones locales
Folding
Propagacin de constantes
Reduccin de potencia
Bloque Bsico
Un bloque bsico es un fragmento de cdigo que tiene una nica entrada y salida, y cuyas
instrucciones se ejecutan secuencialmente. Implicaciones:
Si se ejecuta una instruccin del bloque se ejecutan todas en un orden conocido en tiempo de
compilacin.
La idea del bloque bsico es encontrar partes del programa cuyo anlisis necesario para la
optimizacin sea lo ms simple posible.
Ensamblamiento (Folding)
Reconstruir el rbol.
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.
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
Definicin: (variable,constante)
Sustituir las apariciones de las variables que se encuentran en el conjunto de definiciones por sus
constantes asociadas.
Para asignaciones
x2 ! x * x
x / 2 ! x>>2
EJEMPLOS:
3!i=5
j=4
f = j + 2.5
j=4
f = 6.5
a=b+c
d=a-d
e=b+c
f=a-d
a=b+c
d=a-d
e=a
f=ad
3- Propagacin de copias
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
5- Transformaciones algebraicas:
o Reduccin de potencia
o Reacondicionamiento de operandos
3.1.2 Bucles
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.
Ciclos
while(a == b)
int c = a;
c = 5; ;
En este caso es mejor pasar el int c =a; fuera del ciclo de ser posible. Ciclos
El problema de la optimizacin en ciclos y en general radica es que muy difcil saber el uso exacto
de algunas instrucciones. As que no todo cdigo de proceso puede ser optimizado.
3.1.3 Globales
Este tipo de optimizacin es ms lenta pero mejora el desempeo general de todo programa.
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
3.2 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
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.
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 del microprocesadores son elementos que se deben optimizar para tener un mercado
potencial ms amplio. Costos de ejecucin
Las aplicaciones multimedias 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 aplicacione spara dispositivos mviles.
Costos de ejecucin
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.
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 mas legible.
Los criterios de optimizacin siempre estn definidos por el compilador Criterios de optimizacin
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.
Existen algunas herramientas que permiten el anlisis de los flujos de datos, entre ellas tenemos
los depuradores y desambladores