Qué-es-un-GDA

3
¿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 también 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 también 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 topológico, modelaje de datos o información que fluyen en una sola dirección a través de una red de procesadores. ¿Cómo se pueden usar los GDA para optimizar los bloques de código? En bloques de código 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 representaría el flujo de control del programa. Para optimizar los bloques de código se hace una reconstrucción del código 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. También se debe tomar en cuenta que se realiza una reconstrucción con orden topológico, esto es que solo se

description

Uso de GDA en la optimizacion de bloques de codigo y expresiones

Transcript of Qué-es-un-GDA

Page 1: Qué-es-un-GDA

¿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 también 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 también 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 topológico, modelaje de datos o información que fluyen en una sola dirección a través de una red de procesadores.

¿Cómo se pueden usar los GDA para optimizar los bloques de código?

En bloques de código 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 representaría el flujo de control del programa.

Para optimizar los bloques de código se hace una reconstrucción del código 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.

También se debe tomar en cuenta que se realiza una reconstrucción con orden topológico, esto es que solo se genera código 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 expresión. Si el nodo no contiene variables se crea una variable temporal. No se genera código para etiquetas repetidas.

Para casos en los que se debe seguir un orden específico, este orden se debe reflejar en el GDA.

Al respetar estas reglas, el código que se obtiene no va a contener subexpresiones comunes, no hay instrucciones de copia eliminables, no habrá código inútil y permite obtener cualquier orden de instrucciones.

¿Cómo se pueden usar los GDA para optimizar expresiones?

Page 2: Qué-es-un-GDA

En este caso, el grafo se usa de una forma análoga a como se usa un árbol en una expresión. Las hojas del GDA corresponderán a operandos atómicos y códigos 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 subexpresión común a dichos padres que representan una expresión.

Al no crearse una replicación del nodo para cada subexpresion, se pueden representar las expresiones de una forma más breve que con los arboles y proporciona facilidades a la hora de la compilación.

La optimización se logra con la eliminación de subexpresiones comunes. Esto implica que se debe buscar instancias idénticas de alguna expresión, esto es que al evaluarlas tengan un mismo valor. Si se determina que hay una equivalencia se analiza si resulta conveniente hacer una sustitución de la expresión 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 idénticas. Esta reescritura se basa en el ordenado de operandos. Se debe considerar primero las constantes, después las variables con un orden alfabético, 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 expresión 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.