Vous êtes sur la page 1sur 34

3.

- Optimizacin
La fase de optimizacin de cdigo consiste
en mejorar el cdigo intermedio, de modo que resulte un cdigo mquina ms rpido de ejecutar

Objetivo

Obtener cdigo que se ejecuta ms


eficientemente segn los criterios

Tiempo de ejecucin (optimizacin temporal)


Espacio de memoria utilizado (optimizacin espacial)

Funcionamiento Revisa el cdigo generado a varios niveles de abstraccin y realiza las optimizaciones aplicables al nivel de abstraccin Representaciones de cdigo intermedio de ms a menos abstractas

Ejemplo

Si no se ha definido el orden de evaluacin


de los operando la siguiente optimizacin es

vlida
B=2*A+(A=c*d);

Pasar a
A=c*d;

B=A*3;

3.1 Tipos de Optimizacin


- Momento de la compilacin - Independiente de mquina -Transformaciones intermedio: reduccin en de cdigo coste,

expresiones comunes, propagacin de constantes.

- Dependiente de mquina - Asignacin de registros

- Ordenacin/seleccin de instrucciones
rea del programa donde se aplica Local Ciclos Globales

De mirilla

3.1.1 Optimizacin Local


Es la forma ms simple de optimizacin No se necesita analizar el cuerpo del procedimiento completo.
Slo el bloque bsico que se esta tratando de optimizar.

Cada optimizacin local hace un poco por si mismo la optimizacin en compiladores se realiza de forma repetida hasta que no sea posible mejorar. El optimizador se puede

parar en cualquier momento para limitar el


tiempo de compilacin

Las optimizaciones locales se realizan sobre el bloque bsico

Optimizaciones locales
Folding

Propagacin de constantes
Reduccin de potencia Reduccin de sub-expresiones comunes

Bloque bsico
Un bloque bsico es un fragmento de cdigo que tiene una nica entrada y salida, y cuyas instrucciones se ejecutan secuencialmente. La idea del bloque bsico es encontrar partes del programa cuyo anlisis necesario para la

optimizacin sea lo ms simple posible.

Ejemplo

Folding
El ensamblamiento es remplazar las expresiones por su resultado cuando se pueden evaluar en tiempo de compilacin (resultado constante).

Ejemplo:
A=2+3+A+C -> A=5+A+C

Ejemplo:
Se aade el procesamiento de las constantes a las reglas de anlisis de expresiones. Optimiza: 2+3+b -> 5+b

Propagacin de constantes
Estas optimizaciones permiten que el

programador utilice variables como constantes sin introducir ineficiencias. Ejemplo en C no hay constantes y ser lo mismo utilizar Int a=10; #define a 10

Reduccin de potencia
Se busca sustituir operaciones costosas por otras mas simples. Ejemplo: sustituir productos por sumas. a=2*a a=a+a Evitar la operacin (++) A=length(s1 ++ s2) convertirlo en A=length(s1)+length(s2)

3.1.2 Ciclos
Los programas pasan la mayor parte del
tiempo en ciclos, mientras menos

instrucciones tengan, ms rpido ejecutan


cualquier expresin cuyo valor es

independiente de la cantidad de veces que


se ejecute el ciclo es una invariante del ciclo.

Invariante del ciclo No tiene sentido evaluarla dentro del ciclo. Se mueve el cdigo fuera del ciclo. El destino del cdigo es el bloque de entrada al ciclo, i es una variable de induccin para un ciclo L si existe una constante c tal que cada vez que se asigna un valor a i, su valor aumenta c note que c

puede ser positiva o negativa.

3.1.3 Globales

La optimizacin global se da con respecto a todo el cdigo. Este tipo de optimizacin es ms lenta pero mejora el desempeo general de todo programa. Las optimizaciones globales pueden depender de la arquitectura de la mquina.

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.

Tipos de optimizacin global


Estocsticos: evalan f sobre una muestra aleatoria sobre la regin de inters No Confiables: Simulado recocido (Simulated annealing), bsqueda aleatoria (random search) Sin embargo, la eficiencia es una caracterstica de estos mtodos Problemas de gran escala (+100 variables) son resueltos mejor con estos mtodos estocsticos

Determinsticos: no envuelve ningn elemento aleatorio Confiables: Ramas y bordes (Branch and Bound), mtodos de intervalos (Interval methods) Mtodos de puntos (Point methods): calculan valores de la funcin sobre puntos de muestras (incapaces de resolver confiablemente un problema de optimizacin global). Ejemplo Monte Carlo. Mtodos de bordes (Boundary Methods): calculan cotas sobre conjuntos compactos. Si son implementados apropiadamente y considerando errores de redondeo, pueden producir soluciones globales rigurosas. Ejemplo DIRECT.

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 sin 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 de generarla.

Ejemplo
Pero en cambio si es 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 1. Por Ejemplo: for (int i=0; i<10000; i++); si la ganancia es de 30 ms 300s

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.

Ejemplos
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, tarjetas de videos potentes y de mucha memoria.

Ejemplos
Otro tipo de aplicaciones que deben optimizarse son las aplicaciones para dispositivos mviles, los dispositivos mviles tienen recursos ms limitados que un dispositivo de cmputo convencional, razn por la cul, el mejor uso de memoria y otros recursos de hardware tiene mayor rendimiento.

CRITERIOS PARA MEJORAR EL CDIGO


La mejor manera de optimizar l cdigo es hacer ver a los programadores que optimicen su cdigo desde un 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 definidor 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 civil y cdigo para dispositivos mviles

Herramientas para el anlisis del flujo de datos


El mtodo de desarrollo por anlisis estructurado a menudo se interpreta como til slo para la parte de anlisis de sistemas de la actividad de desarrollo. Algunos analistas lo emplean slo de esta mnera pero su uso no se limita necesariamente a esta fase.
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.

Ventajas del anlisis de flujo de datos


1. Los usuarios y otras personas de la empresa que forman parte del proceso bajo estudio comprenden con facilidad anotaciones sencillas. Por consiguiente, los analistas pueden trabajar con los usuarios y lograr que participen en el estudio de los diagramas de flujo de datos. Los usuarios pueden hacer sugerencias para modificar los diagramas con la finalidad de describir la actividad con mayor exactitud. Asimismo pueden examinar las grficas y reconocer con rapidez problemas El anlisis de flujo de datos permite a los analistas aislar reas de inters en la organizacin y estudiarlas al examinar los datos que entran en el proceso A medida que los analistas renen hechos y detalles, comprenden mejor el proceso

2.

3.

4.

Herramien tas para el anlisis del flujo de datos