Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Compiladores <br />Optimización<br />
Objetivo<br />Mejorar objeto final, preservando significado del programa<br />Factores a optimizar:<br />Velocidad de ejec...
Clasificación de las optimizaciones<br />En función de  la dependencia de la arquitectura<br />Dependientes de la maquina....
Ejecución en tiempo de compilación.
Eliminación de redundancias.
Cambios de orden de ejecución, etc..</li></ul>En función del ámbito de aplicación<br />Optimizaciones locales: Aplicadas d...
Upcoming SlideShare
Loading in …5
×

Optimizacion de Compiladores

3,187 views

Published on

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Optimizacion de Compiladores

  1. 1. Compiladores <br />Optimización<br />
  2. 2. Objetivo<br />Mejorar objeto final, preservando significado del programa<br />Factores a optimizar:<br />Velocidad de ejecución<br />Tamaño del programa<br />Necesidades de memoria<br />Se sigue una aproximación conservadora<br />No se aplican todas las posibles optimizaciones, solo las “seguras”<br />
  3. 3. Clasificación de las optimizaciones<br />En función de la dependencia de la arquitectura<br />Dependientes de la maquina.<br />Independientes de la maquina.<br /><ul><li>Aplicables en cualquier tipo de máquina objetivo.
  4. 4. Ejecución en tiempo de compilación.
  5. 5. Eliminación de redundancias.
  6. 6. Cambios de orden de ejecución, etc..</li></ul>En función del ámbito de aplicación<br />Optimizaciones locales: Aplicadas dentro de un Bloque Básico.<br />Sólo estudian las instrucciones del Bloque Básico actual.<br />Optimizaciones globales: Aplicadas a más de un Bloque Básico.<br />Consideran contenido y flujo de datos entre todos o parte de los Bloques Básicos<br />Necesidad de recoger información sobre los Bloques Básicos y sus interrelaciones.<br />
  7. 7. Optimizaciones Locales<br />1. Ejecución en tiempo de compilación<br />Pre calcular expresiones constantes (con constantes o variables cuyo valor no cambia)<br />a = 9 + 8 a = 17<br />b = 7 b = 7<br />c= b + 2.5 c = 9.5<br />2. Reutilización de expresiones comunes<br />a = b + c a = b + c<br />d = a - e d = a - e<br />e = b + c e = a<br />f = a - e f = d<br />3. Propagación de copias<br />Ante instrucciones “f = a”, sustituir todos los usos de f por a<br />a = 50 + x a = 50 + x<br />f = a b = a + c<br />b = f + c d = a + m<br />d = a + m m= a + d<br />m = f + d<br />
  8. 8. Optimizaciones Globales<br />Optimización Llamadas a Procedimientos<br />Llamadas a procedimientos son muy costosas<br />Cambios del ámbito de referencias<br />Gestion de Regístros de Activación<br />Paso de parámetros + asignación de datos locales<br />Mejoras<br />1. Optimizar manejo de Registros de Activacion<br />Minimizar copia de parámetros y no registros a salvar<br />Uso almacenamiento estático si no hay llamadas recursivas<br />2. Expansión en línea.<br />Expansión en línea<br />Idea: Eliminar llamadas a procesos, “copiando” el cuerpo del proceso en el lugar donde es llamado<br />Evita sobrecarga asociada con llamadas a procesos<br />Permite optimizaciones adicionales<br />-> el código llamado pasa a ser parte del código que lo llama<br />Limitaciones<br />Aumenta uso de memoria ⇒ útil en procesos pequeños y llamados<br />desde pocos lugares<br />-> si se llama en un único lugar (es frecuente), no supone coste de espacio adicional<br />No aplicable en procesos recursivos<br />
  9. 9. Reducción de intensidad en variables de Inducción<br /><ul><li>Cada expresión de inducción k = i ∗ c + d que defina k se reemplazara por un temporal ti</li></ul>inicializado a i0 ∗ c + d, antes de bucle<br />incrementado en un valor s ∗ c, al final del cuerpo del bucle<br /><ul><li>Asignar a k el valor de ti
  10. 10. NOTA: Se podrá aplicar propagación de copias sobre k y ti</li></ul>Si k no se usa fuera del bucle se podrá eliminar, dejando las referencias equivalentes a ti<br /><ul><li>Ejemplo:</li></ul> i := 1;<br /> t1:= 7;<br />i := 1 t2:= 2;<br />while i<=1000 do { while i<=1000 do {<br /> ... ...<br /> a := 4*i + 3; a := t1;<br /> b := 2*i; b := t2;<br /> ... ...<br /> i := i + 1; i := i + 1;<br />} t1:= t1 + 4;<br /> t2:= t2 + 2;<br /> }<br />Optimizaciones Globales<br />

×