Você está na página 1de 2

Qu es un GDA?

Es un grafo dirigido en el que no existen ciclos, esto es que no existen


caminos cerrados donde se repita un nodo inicial-final. Estos se usan
cuando se modela un problema en el que no tiene sentido que un nodo
tenga un camino directo a el mismo. A estos grafos tambin se les
llama arboles, en el caso de que sean conexos, sin embargo son mas
generales que un rbol, pero menos generales que un grafo arbitrario. Si
no son conexos tambin se les conoce como bosques.
Algunos ejemplos de problemas que es conveniente modelar con los
GDA son: varias tareas que se deben ordenar en secuencia, algoritmos
de ordenamiento topolgico, modelaje de datos o informacin que fluyen
en una sola direccin a travs de una red de procesadores.
Cmo se pueden usar los GDA para optimizar los bloques de cdigo?
En bloques de cdigo resultan tiles ya que estos son secuencias de
instrucciones consecutivas con flujo de control que entra al principio y
sin hacer saltos, llega al final. Esta estructura coincide con el tipo de
problema que puede ser modelado con un GDA. El grafo representara el
flujo de control del programa.
Para optimizar los bloques de cdigo se hace una reconstruccin del
cdigo intermedio a partir de ciertas reglas.
Por ejemplo, si un nodo no tiene ascendentes y no tiene variables
activas, se elimina. Si un nodo tiene como descendientes a hojas con
etiquetas constantes, se cambia el nodo por una hoja cuya etiqueta
debe ser calculada a partir de las variables activas y las constantes.
Tambin se debe tomar en cuenta que se realiza una reconstruccin con
orden topolgico, esto es que solo se genera cdigo para un operador y
sus hijos cuando todos los hijos ya hayan sido analizados.
Si un nodo contiene mas de una variable, se toman en cuenta las
variables activas para contener los valores de la expresin. Si el nodo no
contiene variables se crea una variable temporal. No se genera cdigo
para etiquetas repetidas.
Para casos en los que se debe seguir un orden especfico, este orden se
debe reflejar en el GDA.
Al respetar estas reglas, el cdigo que se obtiene no va a contener
subexpresiones comunes, no hay instrucciones de copia eliminables, no
habr cdigo intil y permite obtener cualquier orden de instrucciones.

Cmo se pueden usar los GDA para optimizar expresiones?


En este caso, el grafo se usa de una forma anloga a como se usa un
rbol en una expresin. Las hojas del GDA correspondern a operandos
atmicos y cdigos interiores que corresponden a los operadores. Lo que
diferenciar al grafo del rbol es el hecho de que un nodo del grafo
puede tener varios padres. En este caso ese nodo representa una
subexpresin comn a dichos padres que representan una expresin.
Al no crearse una replicacin del nodo para cada subexpresion, se
pueden representar las expresiones de una forma ms breve que con los
arboles y proporciona facilidades a la hora de la compilacin.
La optimizacin se logra con la eliminacin de subexpresiones comunes.
Esto implica que se debe buscar instancias idnticas de alguna
expresin, esto es que al evaluarlas tengan un mismo valor. Si se
determina que hay una equivalencia se analiza si resulta conveniente
hacer una sustitucin de la expresin por una variable que contenga el
valor resultante.
La equivalencia de un par de expresiones no siempre se puede
determinar directamente por la forma en la que se escriben. En
ocasiones puede que dos expresiones que se escriben de forma distinta
puedan ser reescritas y resulten ser idnticas. Esta reescritura se basa
en el ordenado de operandos. Se debe considerar primero las
constantes, despus las variables con un orden alfabtico, luego las
variables indexadas y por ultimo las subexpresiones.
Determinando las coincidencias de expresiones se procede a verificar
que no haya un nodo que represente dicha expresin antes de crear el
nuevo nodo. Si el nodo ya existe, simplemente se utiliza este y no se
crea otro, de esta forma se optimiza la cantidad de expresiones.

Você também pode gostar