Sunteți pe pagina 1din 2

Anlisis de los datos de flujo

De Wikipedia, la enciclopedia libre


Anlisis de los datos de flujo es una tcnica de recogida de informacin sobre el posible conjunto de valores calculados
en varios puntos de un programa de ordenador. Un programa de grfico de flujo de control (CFG) se utiliza para
determinar aquellas partes de un programa para el cual un valor particular asignado a una variable podra propagar. La
informacin recogida se utiliza a menudo por los compiladores cuando la optimizacin de un programa. Un ejemplo
cannico de un anlisis de flujo de datos est llegando a las definiciones.
Una manera simple de realizar anlisis de flujo de datos de los programas es la creacin de ecuaciones de flujo de datos
para cada nodo del grfico de flujo de control y resolverlos en varias ocasiones calculando la salida de la entrada de
forma local en cada nodo hasta que todo el sistema se estabiliza, es decir, que llega a un punto fijo. Este enfoque general
fue desarrollado por Gary Kildall mientras enseaba en la Escuela Naval de Postgrado.
Principios bsicos
Es el proceso de recopilacin de informacin sobre la forma en que se utilizan las variables, que se define en el
programa. Anlisis de los datos de flujo intenta obtener informacin particular, en cada punto en un procedimiento. Por lo
general, es suficiente para obtener esta informacin en los lmites de los bloques bsicos , ya que desde que es fcil de
calcular la informacin en los puntos en el bloque bsico. En el anlisis de flujo hacia adelante, el estado de salida de un
bloque es una funcin del estado de la entrada del bloque. Esta funcin es la composicin de los efectos de las
sentencias en el bloque. El estado de la entrada de un bloque es una funcin de los estados de salida de sus
predecesores. Esto produce un conjunto de ecuaciones de flujo de datos:
Para cada bloque de b:


En este, es la funcin de transferencia del bloque . Se basa en el estado de la entrada , dando el estado
de salida . La operacin de combinacin combina los estados de salida de los predecesores
de , produciendo el estado de la entrada de .
Despus de resolver este conjunto de ecuaciones, los estados de entrada y / o salida de los bloques se pueden utilizar
para derivar las propiedades del programa en los lmites de bloque. La funcin de transferencia de cada estado por
separado se puede aplicar para obtener informacin en un punto dentro de un bloque bsico.
Cada tipo particular de anlisis de flujo de datos tiene su propia funcin especfica de transferencia y operacin de
combinacin. Algunos problemas de flujo de datos requieren el anlisis de flujo hacia atrs. Esto sigue el mismo plan,
excepto que la funcin de transferencia se aplica a la salida de estado produciendo el estado de la entrada, y la
operacin de combinacin funciona en los estados de entrada de los sucesores para producir el estado de salida.
El punto de entrada (en el flujo hacia adelante) juega un papel importante: Debido a que no tiene predecesores, su
estado de entrada est bien definido al comienzo del anlisis. Por ejemplo, el conjunto de variables locales con valores
conocidos est vaca. Si el grfico de flujo de control no contiene ciclos (no haba explcitas o implcitas bucles en el
procedimiento) resolviendo las ecuaciones es sencilla. El grfico de flujo de control puede ser ordenada topolgico ; que
se ejecuta en el orden de este tipo, los estados de entrada se pueden calcular al inicio de cada bloque, puesto que ya se
han procesado todos los predecesores de ese bloque, por lo que sus estados de salida disponibles. Si el grfico de flujo
de control no contiene ciclos, se requiere un algoritmo ms avanzado.
Un algoritmo iterativo
La forma ms comn de resolver las ecuaciones de flujo de datos es mediante el uso de un algoritmo iterativo. Se inicia
con una aproximacin del estado en cada bloque. Las salidas estados se calculan entonces mediante la aplicacin de las
funciones de transferencia de los en-estado. De estos, los en-estados se actualizan mediante la aplicacin de las
operaciones de unin. Los dos ltimos pasos se repiten hasta que alcancemos el llamado punto fijo : la situacin en que
los en-estados (y las salidas estados en consecuencia) no cambian.
Un algoritmo bsico para resolver ecuaciones de flujo de datos es el algoritmo iterativo de todos contra todos :
para i 1 a N
inicializar i nodo
mientras que ( conjuntos siguen cambiando )
para i 1 a N
conjuntos Recalcular en i nodo
Convergencia
Para ser til, el enfoque iterativo debe realmente llegar a un punto fijo. Esto puede garantizarse mediante la imposicin
de restricciones en la combinacin del dominio de valores de los Estados, las funciones de transferencia y la operacin
de combinacin.
El dominio de valores debe ser un orden parcial con altura finita (es decir, no hay cadenas ascendentes infinitas <
<...). La combinacin de la funcin de transferencia y la operacin de combinacin debe ser montona con respecto a
esta orden parcial. Monotona asegura que en cada iteracin el valor, o bien mantenerse o se hacen ms grandes,
mientras que la altura finita asegura que no puede crecer indefinidamente. As que en ltima instancia llegar a una
situacin en la que T (x) = x para todo x, que es el punto fijo.
El enfoque de la lista de trabajo
Es fcil de mejorar el algoritmo anterior al notar que el en el estado de un bloque no va a cambiar si los fuera-estado de
sus predecesores no cambian. Por lo tanto, presentamos una lista de trabajo : una lista de bloques que todava tienen
que ser procesados.Cada vez que el estado de un bloque cambia, aadimos sus sucesores a la lista de trabajo. En cada
iteracin, un bloque se elimina de la lista de trabajo. Se calcula su estado fuera. Si el estado fuera cambiada, se aaden
los sucesores del bloque a la lista de trabajo. Para una mayor eficiencia, un bloque no debera estar en la lista de trabajo
ms de una vez.
El algoritmo se inicia poniendo de informacin generando bloques en la lista de trabajo. Se termina cuando la lista de
trabajo est vaca.
Las cuestiones de orden
La eficiencia de la solucin iterativa ecuaciones de flujo de datos est influenciado por el orden en el que se visitan los
nodos locales. [ 2 ] Por otra parte, depende, si las ecuaciones de flujo de datos se utilizan para avanzar o anlisis de flujo
de datos hacia atrs sobre la CFG. Intuitivamente, en un problema de flujo hacia adelante, sera ms rpido si todos los
predecesores de un bloque que se hayan procesado antes de que el propio bloque, desde entonces la iteracin utilizar
la informacin ms reciente. En la ausencia de bucles es posible ordenar los bloques de tal manera que las correctas
fuera-estado se calculan mediante el procesamiento de cada bloque de una sola vez.
A continuacin, se discuten algunas rdenes de iteracin para resolver ecuaciones de flujo de datos (un concepto
relacionado con la iteracin orden de un CFG es recorrido de rbol de un rbol ).
Orden aleatorio - Esta orden de iteracin no sabe si las ecuaciones de flujo de datos a resolver un problema de flujo de
datos hacia adelante o hacia atrs. Por lo tanto, el rendimiento es relativamente pobre en comparacin con las rdenes
especializados de iteracin.
Postorden - Esta es una orden de iteracin tpica para los problemas de flujo de datos hacia atrs. En iteracin orden
posterior , se visita un nodo despus de haber visitado todos sus nodos sucesores. Tpicamente, la iteracin orden
posterior se implementa con la profundidad-primero estrategia.
Postorder inversa - Esta es una orden de iteracin tpico de las dificultades de flujo de datos hacia adelante. En iteracin
inversa orden posterior , se visita un nodo antes de cualquiera de sus nodos sucesores ha sido visitado, excepto cuando
el sucesor sea alcanzado por un borde posterior. (Tenga en cuenta que esto no es el mismo que el orden previo .)
Inicializacin
El valor inicial de las en-estados es importante obtener resultados correctos y exactos. Si los resultados se utilizan para
las optimizaciones del compilador, deberan proporcionar conservadora de la informacin, es decir, cuando la aplicacin
de la informacin, el programa no debera cambiar la semntica. La iteracin del algoritmo de punto fijo tomar los
valores en la direccin del elemento de mximo. Inicializacin de todos los bloques con el elemento mximo, por tanto,
no es til. Por lo menos un bloque comienza en un estado con un valor menor que el mximo. Los detalles dependen del
problema del flujo de datos. Si el elemento mnimo representa la informacin totalmente conservadora, los resultados
pueden ser utilizados con seguridad incluso durante la iteracin de flujo de datos. Si se representa la informacin ms
precisa, punto fijo debe ser alcanzado antes se pueden aplicar los resultados.
Ejemplos
Los siguientes son ejemplos de propiedades de los programas de ordenador que se pueden calcular mediante el anlisis
de flujo de datos. Tenga en cuenta que las propiedades calculadas por anlisis de flujo de datos suelen ser slo
aproximaciones de las propiedades reales. Esto es porque el anlisis de flujo de datos opera sobre la estructura
sintctica de la CFG sin simular el flujo de control exacto del programa. Sin embargo, para ser todava til en la prctica,
un algoritmo de anlisis de flujo de datos est diseado especialmente para calcular una aproximacin respectivamente
inferior y superior de las propiedades reales del programa.

S-ar putea să vă placă și