You are on page 1of 17

1.3.

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.

Antes de realizar una optimizacin global es necesario crear el grafo de flujo de ejecucin. El grafo de flujo de ejecucin representa todos los caminos posibles de ejecucin del programa. La informacin contenida en el grafo es til para el programador y el optimizador. La optimizacin global a partir del anlisis del grafo del flujo de ejecucin permite:

Una propagacin de constantes fuera del bloque bsico. Eliminacin del cdigo no utilizado Una mejor asignacin de los registros.

Tipos de grafo: Orientado a procedimiento/funcin Grafo de llamadas

Ejemplo:
int fact(int n) { int r; r=1; i=1; while (i<=n) { r=r*i; ++i; } return r; }

Pasos: Dividir el programa en bloques bsicos: Se representa el programa en un cdigo intermedio donde queden explcitamente representados los saltos condicionales e incondicionales. Un bloque bsico ser cualquier trozo de cdigo que no contenga saltos ni etiquetas en su interior (es posible tener etiquetas al inicio del bloque y saltos al final). En el grafo, los vrtices representan los bloques bsicos y las aristas representan los saltos de un bloque bsico a otro.

Cdigo muerto: es cdigo que nunca se ejecutar.

Deteccin de cdigo no utilizado:


El cdigo no utilizado son los bloques bsicos donde no llega ninguna arista. Se quita el bloque y las aristas que salen de l. Repetir hasta no eliminar ningn bloque bsico.

Hay que considerar como la informacin sobre las variables y expresiones se propaga a travs del grafo.
Esta informacin la representaremos en forma de conjuntos como los siguientes: Expresiones disponibles Alcance de las definiciones variables vivas Expresiones muy utilizadas

Los conjuntos se calculan para los puntos del grafo de flujo de ejecucin.
Un punto es una posicin dentro del grafo y se encuentra entre instrucciones o bloques bsicos.

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

MIRILLA: secuencia corta de instrucciones objeto. Sustituir la mirilla por otras instrucciones ms rpidas o cortas.

Se puede aplicar tanto al cdigo intermedio como al cdigo objeto. En general, se plantea con un conjunto de reglas de reemplazamiento.
Cada mejora puede brindar oportunidades para mejoras adicionales.

Cargas y almacenamientos redundantes: (1) MOV R0,a (2) MOV a, R0 Se elimina (2) ya que est garantizado que con (1) el valor de a est en el registro R0 (siempre que no haya saltos a (2)). Cdigo inalcanzable: Se puede eliminar una instruccin sin etiqueta que siga inmediatamente a un salto incondicional. Optimizaciones del flujo de control: Saltos hacia saltos, saltos hacia saltos condicionales y saltos condicionales hacia saltos.

Eliminacin

de instrucciones intiles. a=a*1 b=b+0 Utilizacin de instrucciones especficas (machine idioms). a=a+1 inc a Reacondicionamiento de instrucciones.

FUENTES DE INFORMACION
http://www.giaa.inf.uc3m.es/docencia/II/P

L1/optimizacion05-06.pdf

http://ccia.ei.uvigo.es/docencia/PL/T11.pdf http://diegoeche.blogspot.mx/2008/01/opti

mizacin-de-cdigo-en-java.html