viernes, 12 de febrero de 2016

OPTIMIZACIÓN


OPTIMIZACIÓN
La optimización de código puede realizarse durante la propia generación o como paso adicional, ya sea intercalado entre el análisis semántico y la generación de código (se optimizan las cuádruplas) o situado después de ésta. 
  
En esta fase se intenta mejorar el código, en el sentido de reducir la cantidad de recursos (tiempo y memoria) necesarios.

Clasificación de optimizaciones:
1.                 Dependientes de la máquina.
·                     Asignación de registros (ver capítulo anterior).
·                     Instrucciones especiales ("idioms").
·                     Reordenación del código.
2.                 Independientes de la máquina.
·                     Ejecución en tiempo de compilación.
·                     Eliminación de redundancias.
·                     Cambio de orden.
·                     Reducción de frecuencia de ejecución (invariancias).
·                     Reducción de fuerza.

Optimización y depuración suelen ser incompatibles. Por ejemplo, si se elimina totalmente una instrucción, puede ser imposible poner una parada en ella para depuración.

La finalidad de la optimización de código es producir un código objeto lo más eficiente posible. En algunos casos también se realiza una optimización del código intermedio. Algunas optimizaciones que se pueden realizar son la evaluación de expresiones constantes, el uso de ciertas propiedades de los operadores, tales como la asociativa, conmutativa, y distributiva; así como la reducción de expresiones comunes.

El objetivo es obtener código que se ejecuta más eficientemente según los criterios:

  §  Tiempo de ejecución (optimización temporal).
  §  Espacio de memoria utilizado (optimización espacial).

FUNCIONAMIENTO

Revisa el código generado a varios niveles de abstracción y realiza las optimizaciones aplicables al nivel de abstracción.

  ü  Representaciones de código intermedio de más a menos abstractas.

·         Árbol sintáctico abstracto: optimizar subexpresiones redundantes, reducción de frecuencia, etc.
·         Tuplas o cuádruplas: optimizar en uso de los registros o de las variables temporales.
·         Ensamblador/Código máquina: convertir saltos a saltos cortos, reordenar instrucciones. Representaciones de código para extraer información: grafos.

Cambia la representación intermedia  de modo que la fase final de generación de código producirá código que se ejecutará más rápido u ocupara menos espacio o ambas cosas.

Se pueden identificar cuatro tipos de optimización:

a) Locales.- Se hacen dentro de una sentencia o grupo de sentencias. Hay dos tipos la de propagación constante y la de eliminación de sub-expresiones comunes.
b) De ciclos iterativos.- Se hacen dentro de los ciclos.
c) Globales.- Se efectúan sobre un programa o procedimiento.

d) De mirilla.- Se realizan después de que el código es seleccionado “atisbando” por una pequeña secuencia de código.



HUMILDAD, CIENCIA Y HONESTIDAD.

No hay comentarios:

Publicar un comentario