Optimizacion

 3.1 TIPOS DE OPTIMIZACION

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).

3.1.1 LOCALES

La optimización local se realiza sobre módulos del programa. En la mayoría de las ocasiones a través de funciones, métodos, procedimientos, clases, etc.

Las características de las optimizaciones locales es que solo se ven reflejados en dichas secciones. La optimización local sirve cuando un bloque de programa o sección es crítico por ejemplo: la E/S, la concurrencia, la rapidez y confiabilidad de un conjunto de instrucciones.


EJEMPLOS:


1-      Ejecución en tiempo de compilación

Precalcular  expresiones constantes (con constantes o variables cuyo valor no cambia).

3 ! i = 5

j = 4

f = j + 2.5

!

j = 4

f = 6.5


2-     Reutilización de expresiones comunes

a = b + c

d = a - d

e = b + c

f = a - d

!

a = b + c

d = a - d

e = a

f = a – d


3-     Propagación de copias

Ante instrucciones f=a, sustituir todos los usos de f por a.

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


4-     Eliminación redundancias en acceso matrices

Localizar expresiones comunes en cálculo direcciones de matrices.


5-     Transformaciones algebraicas:

Aplicar propiedades matemáticas para simplificar expresiones


o   Eliminación secuencias nulas

o   Reducción de potencia

o   Reacondicionamiento de operandos


3.1.2CICLOS


Los ciclos son una de las partes más esenciales en el rendimiento de un programa dado que realizan acciones repetitivas, y si dichas acciones están mal realizadas, el problema se hace N veces más grandes. La mayoría de las optimizaciones sobre ciclos tratan de encontrar elementos que no deben repetirse en un ciclo.

El problema de la optimización en ciclos y en general radica en que es muy difícil saber el uso exacto de algunas instrucciones. Así que no todo código de proceso puede ser optimizado. Otro uso de la optimización puede ser el mejoramiento de consultas en SQL o en aplicaciones remotas (sockets, E/S, etc.).


3.1|.4 MIRILLA


La optimización de mirilla trata de estructurar de manera eficiente el flujo del programa, sobre todo en instrucciones de bifurcación como son las decisiones, ciclos y saltos de rutinas. La idea es tener los saltos lo más cerca de las llamadas, siendo el salto lo más pequeño posible.

Ideas básicas:


Se recorre el código buscando combinaciones de instrucciones que pueden ser reemplazadas por otras equivalentes más eficientes.

Se utiliza una ventana de n instrucciones y un conjunto de patrones de transformación (patrón, secuencias, remplazan).

Las nuevas instrucciones son reconsideradas para las futuras optimizaciones.

Ejemplos:


Eliminación de cargas innecesarias

Reducción de potencia

Eliminación de cadenas de saltos

3.2 Costos


Los costos son el factor más 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 optimización de una


pequeña mejora tal vez tenga una pequeña ganancia en tiempo o en espacio pero


sale muy costosa en tiempo en generarla.


Pero en cambio si esa optimización se hace por ejemplo en un ciclo, la mejora


obtenida puede ser N veces mayor por lo cual el costo se minimiza y es benéfico


la mejora.


Por ejemplo:


for(int i=0; i < 10000; i++); si la ganancia es de 30 ms 300s


3.2.1 Costo de ejecución (Memoria, registros, pilas)


Los costos de ejecución son aquellos que vienen implícitos al ejecutar el


programa.


En algunos programas se tiene un mínimo 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 más amplio.


Las aplicaciones multimedia como los videojuegos tienen un costo de ejecución


alto por lo cual la optimización de su desempeño es crítico, la gran mayoría de las


veces requieren de procesadores rápidos (e.g. tarjetas de video) o de mucha


memoria. Otro tipo de aplicaciones que deben optimizarse son las aplicaciones


para dispositivos móviles.


Los dispositivos móviles tienen recursos más limitados que un dispositivo de


cómputo convencional razón por la cual, el mejor uso de memoria y otros recursos


de hardware tiene mayor rendimiento. En algunos casos es preferible tener la


lógica del negocio más fuerte en otros dispositivos y hacer uso de arquitecturas


descentralizadas como cliente/servidor o P2P.


3.2.2 Criterios para mejorar el código


La mejor manera de optimizar el código es hacer ver a los programadores que


optimicen su código desde el inicio, el problema radica en que el costo podría ser


muy grande ya que tendría que codificar más y/o hacer su código más legible. Los


criterios de optimización siempre están definidos por el compilador.


Muchos de estos criterios pueden modificarse con directivas del compilador desde


el código o de manera externa. Este proceso lo realizan algunas herramientas del


sistema como los ofuscadores para código móvil y código para dispositivos


móviles.


3.2.3 Herramientas para el análisis del flujo de datos


Existen algunas herramientas que permiten el análisis de los flujos de datos, entre


ellas tenemos los depuradores y desambladores. La optimización al igual que la


programación es un arte y no se ha podido sistematizar del todo.

Comentarios

Entradas más populares de este blog

Arboles de expresiones