La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Optimización automática de programas (OAP) Germán Vidal 1 Optimización automática de programas Tema 1: Introducción 1.1. Técnicas de análisis estático.

Presentaciones similares


Presentación del tema: "Optimización automática de programas (OAP) Germán Vidal 1 Optimización automática de programas Tema 1: Introducción 1.1. Técnicas de análisis estático."— Transcripción de la presentación:

1 Optimización automática de programas (OAP) Germán Vidal 1 Optimización automática de programas Tema 1: Introducción 1.1. Técnicas de análisis estático 1.2. Evaluación parcial

2 Optimización automática de programas (OAP) Germán Vidal 2 1.1. Técnicas de análisis estático

3 Optimización automática de programas (OAP) Germán Vidal 3 Bibliografía M. Hermenegildo. Abstract interpretation and its applications. Advanced school on foundations of logic programming, 1990.M. Hermenegildo. Abstract interpretation and its applications. Advanced school on foundations of logic programming, 1990. F. Nielson, H.R. Nielson, C. Hankin. Principles of program analysis. Springer- Verlag, 2005 (2nd edition).F. Nielson, H.R. Nielson, C. Hankin. Principles of program analysis. Springer- Verlag, 2005 (2nd edition).

4 Optimización automática de programas (OAP) Germán Vidal 4 Análisis de programas Muchos problemas en informática están relacionados con el análisis/síntesis de programas Demostrar que cierta propiedad se cumple para un programa P (análisis de programas) Dado un programa P, generar un programa P’ que  sea (de alguna manera) equivalente a P  se comporte mejor que P respecto a algún criterio (síntesis de programas)

5 Optimización automática de programas (OAP) Germán Vidal 5 EjemploEjemplo:  identificar información que se cumple de forma invariante en algún punto del programa  especializar el programa para el caso particular Los análisis de programas son frecuentes en los compiladores (poco tratados desde un punto de vista formal) Un tratamiento más formal podría aportar muchas ventajas…

6 Optimización automática de programas (OAP) Germán Vidal 6 Qué es la interpretación abstracta? Proporciona un marco formal para el desarrollo de herramientas para el análisis de programas (Cousot, 1977) Fase de análisis + Fase de síntesis = Interp. abstracta + Transform. de programas

7 Optimización automática de programas (OAP) Germán Vidal 7 Algunas observaciones:  El razonamiento humano acerca de los programas suele ser aproximado: aritmética de los signos, par/impar, etc impar + impar = parpar + impar = impar impar + par = impar par + par = par  Un análisis exhaustivo sobre el dominio estándar suele ser infinito  La mayor parte de las propiedades interesantes son “indecidibles” Conclusión: se requiere un método “aproximado” para el análisis de los programas…

8 Optimización automática de programas (OAP) Germán Vidal 8 Idea básicaIdea básica: usar representaciones aproximadas de los objetos computacionales (problema tratable) La interp. abstracta es una formalización de esta idea:  computar expresiones sobre un dominio abstracto (aproximado) en lugar de sobre el dominio concreto (el significado de los operadores deberá redefinirse)  definir una semántica no estándar que permita aproximar el significado de un programa de modo finito

9 Optimización automática de programas (OAP) Germán Vidal 9 Es una técnica muy general: se puede aplicar a cualquier lenguaje (siempre que posea una semántica bien definida) La interpretación abstracta formaliza un marco en el que desarrollar análisis concretos (instanciando los parámetros del marco)

10 Optimización automática de programas (OAP) Germán Vidal 10 Ejemplo: aritmética de los signos Consideramos el dominio D = Z (enteros) y el operador de multiplicación: * : Z  Z Definimos un dominio “abstracto”: D a = { [-], [+] } La multiplicación “abstracta” sería: * a : D a x D a  D a * a [-][+] [-][+][-] [+][-][+] Sabemos, por ejemplo, que x 2 nunca será negativo

11 Optimización automática de programas (OAP) Germán Vidal 11 Algunas observaciones:  siempre que z = x*y, si x, y están aproximados por x a, y a entonces z está aproximado por z a = x a * a y a  Para poder demostrar que un análisis es correcto, es necesario formalizar esta noción de “aproximación”  Las computaciones aproximadas son generalmente menos precisas pero más rápidas (a menudo la diferencia está entre terminación o no terminación)

12 Optimización automática de programas (OAP) Germán Vidal 12 Consideremos ahora un dominio abstracto más refinado: D a = { [-], [0], [+] } La multiplicación abstracta sería ahora: * a [-][0][+] [-][+][0][-] [0][0][0][0] [+][-][0][+] Sabemos, por ejemplo, que y * (0 * x) siempre vale cero

13 Optimización automática de programas (OAP) Germán Vidal 13 Algunas observaciones:  Hay un cierto grado de libertad en la definición de los dominios y operadores abstractos  El requerimiento mínimo es que sean “seguros” o “correctos”  Pueden existir diferentes definiciones “correctas” que den lugar a diferentes tipos de análisis

14 Optimización automática de programas (OAP) Germán Vidal 14 Consideremos ahora la suma abstracta: + a : Z x Z  Z Si usamos el dominio abstracto D a = { [-], [0], [+] } no podemos representar el resultado de [+] + a [-] “Cerramos” el dominio añadiendo el nuevo elemento T (TOP) que aproxima a cualquier entero

15 Optimización automática de programas (OAP) Germán Vidal 15 La suma abstracta se define así: + a [-][0][+] T [-][-][-] T T [0][-][0][+] T [+] T [+][+] T T T T T T Sabemos, por ejemplo, que x 2 + y 2 nunca es negativo

16 Optimización automática de programas (OAP) Germán Vidal 16 Algunas observaciones:  Además de la imprecisión debida al dominio abstracto, los operadores abstractos también pueden provocar nuevas pérdidas de precisión  La elección del dominio abstracto es crucial!

17 Optimización automática de programas (OAP) Germán Vidal 17 Propiedades de la interp. abstracta RequeridasRequeridas:  corrección  corrección: las aproximaciones deben ser “seguras” Puesto que la mayoría de propiedades “interesantes” son indecidibles, los análisis deben ser necesaria- mente aproximados (hay que asegurar que sean “conservativos”, i.e., aproximen “por exceso”)  terminación  terminación: el proceso de análisis debe ser siempre finito

18 Optimización automática de programas (OAP) Germán Vidal 18 Propiedades de la interp. abstracta AconsejablesAconsejables:  eficiencia  eficiencia: en la práctica no basta con que el análisis sea finito, debe ser rápido…  precisión  precisión: el resultado debe estar lo más cercano posible a los valores “reales” (no aproximados) Depende del dominio abstracto y de los operadores abstractos definidos sobre él  utilidad  utilidad: la información obtenida por el análisis debe ser útil (a menudo depende del compilador)

19 Optimización automática de programas (OAP) Germán Vidal 19 1.2. Evaluación parcial

20 Optimización automática de programas (OAP) Germán Vidal 20 Bibliografía N.D. Jones, C.K. Gomard, P. Sestoft Partial Evaluation and Automatic Program Generation Prentice Hall, 1993 Actualmente disponible online en http://www.dina.kvl.dk/~sestoft/pebook/pebook.html

21 Optimización automática de programas (OAP) Germán Vidal 21 Introducción Especialización de programasEspecialización de programas: parte  generación de un programa especializado a partir de un programa y parte de sus datos de entrada (técnica general: aplicable a cualquier lenguaje) Intérprete  evaluador parcial  compilador

22 Optimización automática de programas (OAP) Germán Vidal 22 Aplicaciones: 1. Especialización de programas paramétricos: Bases de datos –especialización del mecanismo de comprobación de integridad respecto a unas restricciones dadas (x5 - x100) Simulación –especialización de un simulador para un circuito electrónico concreto (x2 - x5) Gráficos por ordenador –especialización para una escena dada (x1.5 - x3) Reconocimiento de patrones Redes neuronales, computación científica, etc 2. Optimización automática de programas 3. Generación automática de compiladores 4. Otros (algoritmos adaptativos, etc)

23 Optimización automática de programas (OAP) Germán Vidal 23 Antecedentes Teorema s-m-n de Kleene (funciones) Turchin (Rusia): supercompilador Refal Futamura (Japón): proyecciones Lombardi (USA): computación incremental

24 Optimización automática de programas (OAP) Germán Vidal 24 Esencia de la evaluación parcial: p(in1,in2) = out (similar a las proyecciones en matemáticas) datos estáticos in1 programa p evaluador parcial (mix) datos dinámicos in2 programa especializado p in1 out

25 Optimización automática de programas (OAP) Germán Vidal 25 Ejemplo Dado el programa p (calcula x n ): f(n,x) = IF (n = 0) THEN 1 ELSE IF par(n) THEN f(n/2,x)^2 ELSE x * f(n-1,x) Si n=5, podemos generar p 5 : f_5(x) = x * ((x^2)^2)

26 Optimización automática de programas (OAP) Germán Vidal 26 El nuevo programa p 5 es más eficiente que p, aunque sólo sirve para elevar un número a 5 (si el dato conocido hubiera sido x, no habríamos podido especializar nada…) Técnicas básicas para la EP: 1. computación “simbólica” 2. desplegado de llamadas

27 Optimización automática de programas (OAP) Germán Vidal 27 Meta-programación Meta-programaciónMeta-programación: programas como datos de entrada (y salida) a otros programas Notación:  D: dominio de datos (y programas)  Lenguajes de programación: L: lenguaje de implementación S: lenguaje fuente T: lenguaje objeto [[p]] S : D × … × D  D: “significado” del programa: output = [[p]] S [in1, in2,..., in n ] (similar a la idea de intérprete)

28 Optimización automática de programas (OAP) Germán Vidal 28 Definición ecuacional de mix Sea prog un programa con dos entradas:  in1 : datos estáticos  in2 : datos dinámicos Computación para prog en una fase:  output = [[prog]] [in1, in2] Computación para prog en dos fases:  prog in1 = [[mix]] [prog, in1]  output = [[prog in1 ]] [in2] Combinando las dos ecuaciones anteriores:  [[prog]] [in1,in2] = [[ [[mix]] [prog,in1] ]] in2] (definición ecuacional de mix) Garantiza: corrección y existencia:  [[mix]] [prog, in1] = \x -> [[prog]] [in1, x]

29 Optimización automática de programas (OAP) Germán Vidal 29 Tipos de evaluación parcial offlineoffline:  dos fases independientes  más rápido  menos preciso onlineonline:  una sóla fase  más preciso  más lento

30 Optimización automática de programas (OAP) Germán Vidal 30 Evaluación parcial offline programa parámetros estáticos BTA programa anotado mix programa especializado valores de los parámetros estáticos

31 Optimización automática de programas (OAP) Germán Vidal 31 Evaluación parcial online programa mix programa especializado valores de los parámetros estáticos

32 Optimización automática de programas (OAP) Germán Vidal 32 En ambos casos:  se evalúan expresiones (tanto como sea posible)  se despliegan las llamadas a función o procedimiento  se genera código residual para el resto… Problema común: terminación  garantizar la terminación del proceso! (e.g., especializar x n con x=3)

33 Optimización automática de programas (OAP) Germán Vidal 33 Utilidad de la evaluación parcial Incremento de eficienciaIncremento de eficiencia: el programa p in1 suele ser más eficiente que p Dado un programa p, unos datos de entrada in1, in2 y un lenguaje L, denotamos por: t p (in1, in2) el “coste temporal” de computar [[p]] L [in1, in2]

34 Optimización automática de programas (OAP) Germán Vidal 34 Cuando existen datos (in2) que cambian con más frecuencia que in1:  generamos p in1 cada vez que in1 cambie (p in1 es más eficiente que p) Podemos ganar eficiencia incluso en una sóla ejecución: t mix (p, in1) + t p in1 (in2) < t p (in1, in2) (pensad en el caso de un compilador: t comp (fuente) + t objeto (input) < t int (fuente, input) )

35 Optimización automática de programas (OAP) Germán Vidal 35 Eficiencia vs generalidad Supongamos que tenemos que resolver varios problemas similares de manera eficiente: a) Hacemos un programa para cada caso particular b) Hacemos un programa general que resuelva todos los casos La solución (a) conlleva mucho trabajo de programación (y mayor dificultad para mantenerlo) La solución (b) da lugar a un programa ineficiente…

36 Optimización automática de programas (OAP) Germán Vidal 36 SoluciónSolución:  hacer un programa general y especializarlo automáticamente para cada caso VentajasVentajas:  la corrección de las distintas versiones está asegurada  obtenemos un buen nivel de eficiencia  es fácil de mantener Ejemplos de aplicaciónEjemplos de aplicación:  Aplicaciones gráficas por “ray-tracing”  Consulta a bases de datos  Redes neuronales  Computación científica

37 Optimización automática de programas (OAP) Germán Vidal 37 Computación en varias fases Motivo para pasar de 1 a 2 fases: eficiencia! La evaluación parcial nos ofrece un método automático para trasladar un problema resuelto en una fase a dos… programa intérpreteinputoutput programa programa objeto inputoutput compilador una fase: intérpretedos fases: compilador

38 Optimización automática de programas (OAP) Germán Vidal 38 Compilación dirigida por la semántica El desarrollo tradicional de un compilador no está dirigido por la semántica; las fases de desarrollo son: 1. escribir la especificación del lenguaje (por ejemplo, dando un intérprete) 2. escribir el compilador 3. depurarlo para eliminar errores y mejorar eficiencia El coste asociado al desarrollo es enorme!

39 Optimización automática de programas (OAP) Germán Vidal 39 AlternativaAlternativa: 1. escribir la especificación del lenguaje 2. usar un generador de compiladores El coste es mucho menor y, además, no hace falta depurar el compilador (sólo mejorar su eficiencia) evaluación parcialActualmente, una de las técnicas más adecuadas para abordar la construcción de un generador de compila- dores de uso general es la evaluación parcial…

40 Optimización automática de programas (OAP) Germán Vidal 40 Evaluación parcial vs compilación Elimina la EP la necesidad de escribir compiladores? A favorA favor:  dada la especificación de un lenguaje, la EP elimina la “sobrecarga de interpretación”  el programa compilado siempre es correcto En contraEn contra  el programa objeto está escrito en el lenguaje de mix (L) o en el lenguaje fuente (S) no inventa un lenguaje de bajo nivel  el programa objeto usa las estructuras de datos del programa fuente no inventa estructuras de datos nuevas

41 Optimización automática de programas (OAP) Germán Vidal 41 En resumenEn resumen:  la EP es la mejor opción si se está trabajando en el diseño de un nuevo lenguaje  un compilador generado mediante EP nunca será tan eficiente como uno escrito a mano  pero, puede ser un buen punto de partida para desarrollar un compilador eficiente…

42 Optimización automática de programas (OAP) Germán Vidal 42 Evaluación parcial e interpretación El coste de la interpretaciónEl coste de la interpretación: la ejecución de un intéprete satisface la ecuación: a p × t p (d) ≤ t int (p, d) donde a p (≥ 10) es una constante independiente de d (aunque suele ser dependiente del programa fuente p ) La constante a p nos indica la cantidad de sobrecarga computacional debida a la interpretación

43 Optimización automática de programas (OAP) Germán Vidal 43 OptimalidadOptimalidad: diremos que mix es óptimo si a p ≈ 1 (i.e., si elimina completamente la sobrecarga de interpretación) La optimalidad de un evaluador parcial se puede comprobar haciendo uso de un meta-intérprete ( m_int ) [[p]] d = [[m_int]] [p, d] = [[ [[mix]] [m_int, p] ]] d p’ Diremos que mix es óptimo si t p’ (d) ≤ t p (d) para todo p y d (informalmente, p’ debería ser igual a p )

44 Optimización automática de programas (OAP) Germán Vidal 44 Proyecciones de Futamura Suponemos que mix:  está escrito en L  toma un programa escrito en S  devuelve un programa especializado escrito en L (mix : S  L) Vamos a demostrar que mix puede usarse para:  compilar programas  generar compiladores  generar generadores de compiladores

45 Optimización automática de programas (OAP) Germán Vidal 45 Ecuaciones de partida: IntérpreteIntérprete: output = [[fuente]] S [input] = [[int]] L [fuente, input] CompiladorCompilador: output = [[fuente]] S [input] = [[ [[comp]] L [fuente] ]] T [input] = [[objeto]] T [input] ( objeto = [[comp]] L [fuente] ) EspecializadorEspecializador: output = [[fuente]] S [in1, in2] = [[ [[mix]] L [fuente, in1] ]] L [in2]

46 Optimización automática de programas (OAP) Germán Vidal 46 Primera proyección de Futamura La compilación de programas usando mix se deriva de: output = [[fuente]] S [input] = [[int]] S [fuente, input] = [[[[mix]] L [int,fuente] ]] L [input] = [[objeto]] L [input] Primera proyección de Futamura: objeto = [[mix]] L [int, fuente]

47 Optimización automática de programas (OAP) Germán Vidal 47 Algunas cuestiones:  mix hace el papel de un compilador, traduciendo del lenguaje S al lenguaje L  suponemos que int y fuente están ambos escritos en S (int es un meta-intérprete)  el programa objeto estará escrito en L y no en T  si tuvieramos un programa mix que especializase programas escritos en S y produjese programas especializados escritos en T, la equivalencia con un compilador (de S a T) sería completa

48 Optimización automática de programas (OAP) Germán Vidal 48 Segunda proyección de Futamura La generación de compiladores se deriva de: objeto = [[mix]] L [int, fuente] = [[ [[mix]] L [mix, int] ]] L [fuente] = [[comp]] L [fuente] Segunda proyección de Futamura: comp = [[mix]] L [mix, int]

49 Optimización automática de programas (OAP) Germán Vidal 49 Algunas cuestiones:  mix nos permite generar un compilador (a partir de un intérprete)  mix debe ser auto-aplicable (S = L), ya que de otro modo no podría tomar como entrada mix (escrito en L)  complejo, pero buenos resultados en la práctica

50 Optimización automática de programas (OAP) Germán Vidal 50 Tercera proyección de Futamura La generación de generadores de compiladores se deriva de: comp = [[mix]] L [mix, int] = [[ [[mix]] L [mix, mix] ]] L [int] = [[cogen]] L [int] Tercera proyección de Futamura: cogen = [[mix]] L [mix, mix]

51 Optimización automática de programas (OAP) Germán Vidal 51 Algunas cuestiones:  mix nos permite generar un generador de compiladores (a partir de mix únicamente)  qué efecto puede tener ejecutar un programa tomando como datos de entrada el propio programa que, a su vez, toma como datos de entrada el propio programa?  qué relación habrá entre los compiladores generados con cogen y los generados a mano?

52 Optimización automática de programas (OAP) Germán Vidal 52 Concluyendo… La EP tiene muchas aplicaciones prome- tedoras, pero también siguen habiendo problemas por resolver:  hacer más fácil el proceso (para el usuario)  predecir cuándo habrán incrementos de eficiencia y cuándo no (antes de realizar la EP)  clarificar los límites de la EP (qué cosas no podrá nunca hacer)  etc, etc


Descargar ppt "Optimización automática de programas (OAP) Germán Vidal 1 Optimización automática de programas Tema 1: Introducción 1.1. Técnicas de análisis estático."

Presentaciones similares


Anuncios Google