3.1 Tipos de optimización.
En
ciencias de la computación, un
compilador optimizador es un
compilador que trata de minimizar ciertos atributos de un
programa informático con el fin de aumentar la
eficiencia y
rendimiento.Las optimizaciones del compilador se aplican generalmente mediante una secuencia de
transformaciones de optimización,
algoritmos que transforman un programa para producir otro con una salida
semánticamente equivalente pero
optimizado.
Generalmente hay varios aspectos que se desean optimizar:
- Optimización temporal: Reducir el tiempo de ejecución del programa.
- Optimización espacial: Reducir la cantidad de espacio en memoria que ocupa el programa en ejecución.
- Reducir el tamaño del programa.
- Minimizar la potencia consumida por un programa (debido a las computadoras portátiles).
Etapas de compilación
La optimización se realiza después de la
generación de código de todo el programa o de un elemento ejecutable del programa (
función,
procedimiento, etc), por ende es
dependiente del contexto.La condición que ha de cumplir es que el código optimizado se ha de
comportar igual que el código de partida, excepto por ser más rápido o
ocupar menos espacio.
Se ha demostrado que algunos problemas de optimización de código son
NP-completo, o incluso
indecidibles. En la práctica, factores como la voluntad del
programador
que debe esperar a que el compilador complete sus tareas, imponen
límites superiores en las optimizaciones que las que una simple
implementación del compilador puede proporcionar (la optimización es un
proceso muy intensivo que generalmente necesita mucho procesamiento y
memoria para llevarse a cabo). En el pasado, las limitaciones de memoria
de las computadoras también eran un factor importante en la limitación
de las optimizaciones que se podían realizar. Debido a todos estos
factores, la optimización rara vez produce una salida de forma óptima
(valga la redundancia), y el hecho de que una optimización pueda impedir
el rendimiento en algunos casos, hace que, sean
métodos heurísticos para mejorar el uso de los recursos en los programas típicos.
La optimización es el campo donde se hace más investigación en los compiladores hoy en día. Las tareas del
front-end (exploración,
análisis sintáctico,
análisis léxico,
análisis semántico)
son bien conocidas y, sin optimizar, la generación de código es
relativamente sencilla. La optimización, por otra parte, aún es un campo
que no se ha terminado de desarrollar de forma completa.