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 4: Evaluación parcial offline 4.1. Conceptos básicos.

Presentaciones similares


Presentación del tema: "Optimización automática de programas (OAP) Germán Vidal 1 Optimización automática de programas Tema 4: Evaluación parcial offline 4.1. Conceptos básicos."— 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 4: Evaluación parcial offline 4.1. Conceptos básicos 4.2. Binding-time analysis (BTA) 4.3. Incluyendo anotaciones 4.4. Algoritmo de especialización 4.5. Unfolding

2 Optimización automática de programas (OAP) Germán Vidal 2 4.1. 4.1. Conceptos básicos Objetivo del tema:Objetivo del tema:  definir un evaluador parcial offline para un lenguaje funcional de primer orden sencillo (un subconjunto de Scheme) La ventaja de considerar programas Scheme (o Lisp) es que el parsing es muy sencilloLa ventaja de considerar programas Scheme (o Lisp) es que el parsing es muy sencillo  cada elemento del lenguaje va precedido por una “etiqueta”, e.g., call, if, quote, etc Asumimos que la ejecución del programa siempre comienza con una llamada a la primera funciónAsumimos que la ejecución del programa siempre comienza con una llamada a la primera función  la llamada “goal function” (como main en C)

3 Optimización automática de programas (OAP) Germán Vidal 3 Sintaxis ::= (... ) ::= (... ) ::= ::= (define ( ) ) ::=... ::=... ::= ::= | | | (if ) | (if ) | (call ) | (call ) | ( ) | ( ) ::=... ::=... ::= | (quote ) ::= | (quote ) ::= car | cdr | cons | = | + |... ::= car | cdr | cons | = | + |...

4 Optimización automática de programas (OAP) Germán Vidal 4 Puntos del programa y divisiones Puntos del programaPuntos del programa  cada nombre de función representa un “punto del programa” DivisiónDivisión  clasificación de cada parámetro de una función como estático o dinámico  puede ser monovariante (una división por función) o polivariante (más de una división por función)  consideraremos divisiones monovariantes (las polivariantes se podrían simular creando copias de las funciones)

5 Optimización automática de programas (OAP) Germán Vidal 5 Congruencia Decimos que una división es congruente siDecimos que una división es congruente si  el valor de un parámetro estático viene determinado únicamente por parámetros estáticos  si un parámetro depende al menos de un parámetro dinámico, entonces debe ser también dinámico

6 Optimización automática de programas (OAP) Germán Vidal 6 Especialización de puntos del programa Puntos del programa especializadosPuntos del programa especializados  se nombran (f,vs), donde f es el nombre original de la función y vs la lista de parámetros estáticos  a menudo se crean también versiones especializadas para (if e 1 e 2 e 3 ) si e 1 es dinámico

7 Optimización automática de programas (OAP) Germán Vidal 7 Compresión de transiciones La “compresión de transiciones” se corresponde con el desplegado de una función (unfolding)La “compresión de transiciones” se corresponde con el desplegado de una función (unfolding)  puede ser “on-the-fly” o  como un post-proceso En cualquier caso, se debe evitar:En cualquier caso, se debe evitar:  unfolding infinito  duplicación de código o computaciones  producir más llamadas residuales de las necesarias

8 Optimización automática de programas (OAP) Germán Vidal 8 Estrategias para el unfolding on-the-fly No unfoldingNo unfolding  pobre especialización, ya que todas las llamadas a función se consideran dinámicas Desplegar sólo las llamadas a función cuyos argumentos sean todos estáticosDesplegar sólo las llamadas a función cuyos argumentos sean todos estáticos  buenos resultados, aunque sigue habiendo riesgo de no terminación… Elegimos esta opción

9 Optimización automática de programas (OAP) Germán Vidal 9 Binding-time analysis Proceso:Proceso:  toma un programa y la división para la función principal y devuelve una división congruente para todas las funciones del programa Se define como una instancia del marco de interpretación abstractaSe define como una instancia del marco de interpretación abstracta  Dominio abstracto: {S,D}  S : valor estático  D : valor dinámico

10 Optimización automática de programas (OAP) Germán Vidal 10 Anotaciones Generamos anotaciones a partir del las divisionesGeneramos anotaciones a partir del las divisiones  la división nos dice si un parámetro es estático o dinámico  las anotaciones nos dicen cómo debe evaluarse cada expresión del programa En realidad ambas cosas representan la misma informaciónEn realidad ambas cosas representan la misma información  es decir, las anotaciones no son realmente necesarias, pero simplifican el proceso de evaluación parcial División congruente  anotación consistenteDivisión congruente  anotación consistente

11 Optimización automática de programas (OAP) Germán Vidal 11 Anotaciones: sintaxis Para expresar las anotaciones se suele emplear un lenguaje a dos nivelesPara expresar las anotaciones se suele emplear un lenguaje a dos niveles  se crean dos versiones de cada construcción del lenguaje (condicional, llamada a función, etc)  la versión estática se emplea para indicar que debe evaluarse en tiempo de evaluación parcial  la versión dinámica se emplea para indicar que la expresión debe debe “residualizarse” (continuando con la evaluación parcial de los argumentos)

12 Optimización automática de programas (OAP) Germán Vidal 12 4.2. Binding-Time Analysis (BTA) Sólo monovarianteSólo monovariante  i.e., una división para cada función Basado en interpretación abstractaBasado en interpretación abstracta  dominio abstracto: {S,D} Datos de entrada:Datos de entrada: (define (f 1 x 11... x 1a 1 ) e 1 )... (define (f n x n1... x na n ) e n ) y τ 1 (binding-times para f 1 )

13 Optimización automática de programas (OAP) Germán Vidal 13 Dominios y órdenes Dominios:Dominios: t  BindingTime = {S,D} t  BindingTime = {S,D}   BTEnv = [BindingTime]   BTEnv = [BindingTime] div  Monodivision = FuncName  BTEnv div  Monodivision = FuncName  BTEnv Órdenes:Órdenes:  sobre BindingTime: t ≤ t’  t = S o t = t’ (≤: menos dinámico)  sobre BTEnv: (s 1,...,s n ) ≤ (t 1,...t n )  s i ≤ t i i=1,...,n  sobre divisiones: div 1 ≤ div 2  div 1 (f) ≤ div 2 (f) para toda f

14 Optimización automática de programas (OAP) Germán Vidal 14 Objetivo del análisis Encontrar la divisiónEncontrar la división  congruente  menos dinámica (con el orden ≤ ) Pensad que, por ejemplo, la divisiónPensad que, por ejemplo, la división div i = [D,D,…,D] siempre es congruente (pero no sirve para nada) Usaremos el lub  :Usaremos el lub  : S  S = S S  D = D  S = D  D = D (y su extensión a BTEnv y divisiones)

15 Optimización automática de programas (OAP) Germán Vidal 15 Funciones Funciones del análisis:Funciones del análisis: B v [[e]]: BTEnv  FuncName  BTEnv  dada una expresión, un BTEnv y un nombre de función, nos dice cuál debería ser el BTEnv de dicha función de acuerdo a las llamadas que aparecen en la expresión B e [[e]]: BTEnv  BindingTime  dada una expresión y un BTEnv, nos dice si la expresión es estática o dinámica

16 Optimización automática de programas (OAP) Germán Vidal 16 Función B v [[e]] B v [[c]]  g = (S,...,S) B v [[x j ]]  g = (S,...,S) B v [[if e 1 e 2 e 3 ]]  g = B v [[e 1 ]]  g  B v [[e 2 ]]  g  B v [[e 3 ]]  g B v [[call f e 1... e n ]]  g = t  (Be[[e 1 ]] ,...,Be[[e n ]]]  ) if f=g t if f  ≠g where t = B v [[e 1 ]]  g ...  B v [[e n ]]  g B v [[op e 1... e n ]]  g = B v [[e 1 ]]  g ...  B v [[e n ]]  g

17 Optimización automática de programas (OAP) Germán Vidal 17 Función B e [[e]] B e [[c]]  = S B e [[x j ]]  = t j where  = (t 1,..., t n ) B e [[if e 1 e 2 e 3 ]]  = B e [[e 1 ]]   B e [[e 2 ]]   B e [[e 3 ]]  = B e [[e 1 ]]   B e [[e 2 ]]   B e [[e 3 ]]  B e [[call f e 1... e n ]]  = B e [[e 1 ]]  ...  B e [[e n ]]  = B e [[e 1 ]]  ...  B e [[e n ]]  B e [[op e 1... e n ]]  = B e [[e 1 ]]  ...  B e [[e n ]]  = B e [[e 1 ]]  ...  B e [[e n ]] 

18 Optimización automática de programas (OAP) Germán Vidal 18 El requerimiento de congruencia Se debe cumplir:Se debe cumplir:  si hay alguna llamada a una función g cuyo argumento n es dinámico, entonces el parámetro n de g debe ser dinámico: (div g) = U i=1,…,n B v [[e i ]](div f i ) g donde f 1,…,f n son las funciones del programa y e 1,…,e n son las partes derechas Generalizando:Generalizando: (div f k ) = U i=1,…,n B v [[e i ]](div f i ) f k para k = 1,…,n

19 Optimización automática de programas (OAP) Germán Vidal 19 Algoritmo BTA Sirve para obtener la “mejor” división congruente (es decir, la menos dinámica)Sirve para obtener la “mejor” división congruente (es decir, la menos dinámica) Proceso iterativo: div 0 ≤ div 1 ≤ div 2 ≤ …Proceso iterativo: div 0 ≤ div 1 ≤ div 2 ≤ … (1) Inicio: div 0 = [f 1  , f 2  (S,…,S),…,f n  (S,…,S)] (2) Computamos div j : U i=1,…,n B v [[e i ]](div j-1 f i ) f k, k = 1,…,n (3) Si div j = div j-1  STOP si no  vuelta al paso (2) si no  vuelta al paso (2)

20 Optimización automática de programas (OAP) Germán Vidal 20 Algoritmo BTA La terminación está garantizada…La terminación está garantizada…  ¿por que? OJO: hay un error en el libro:OJO: hay un error en el libro:  la función f 1 es una excepción: (div j f 1 ) =  U U i=1,…,n B v [[e i ]](div j-1 f i ) f 1  U U i=1,…,n B v [[e i ]](div j-1 f i ) f 1

21 Optimización automática de programas (OAP) Germán Vidal 21 Ejercicio 5.1 (a) Calculad el resultado del BTA para el programaCalculad el resultado del BTA para el programa (define (power x n) (if (= n 0) (if (= n 0) 1 (* x (call power x (- n 1))) (* x (call power x (- n 1))) ) ) con x dinámica y n estática

22 Optimización automática de programas (OAP) Germán Vidal 22 4.3. Incluyendo anotaciones Empleamos una sintaxis a 2 niveles:Empleamos una sintaxis a 2 niveles: ::= ::= | | | (ifs ) | (ifd ) | (calls ) | (calls ) | (calld ) | (calld ) | ( s ) | ( d ) | (lift ) ::=... ::=...

23 Optimización automática de programas (OAP) Germán Vidal 23 De divisiones a anotaciones (1) Realizamos los siguientes pasos:Realizamos los siguientes pasos:  cada función (define (f x 1... x a ) e)  se tranforma en (define (f (x s1... x sm ) (x d1... x dk )) e ann )  donde (x s1... x sm ) son los parámetros estáticos, (x s1... x sm ) son los parámetros estáticos, (x d1... x dk ) son los parámetros dinámicos y (x d1... x dk ) son los parámetros dinámicos y e ann es el cuerpo de la función anotado e ann es el cuerpo de la función anotado

24 Optimización automática de programas (OAP) Germán Vidal 24 De divisiones a anotaciones (2) La expresión anotada e ann se obtiene así:La expresión anotada e ann se obtiene así:  llamadas a función (call g e 1... e a ) : (calls g (e 1 … e a ) ()) si todos los args son estáticos (calls g (e 1 … e a ) ()) si todos los args son estáticos (calld g (e s1 … e sm ) (e d1 … e dk )) en otro caso (calld g (e s1 … e sm ) (e d1 … e dk )) en otro caso  condicionales (if e 1 e 2 e 3 ) : (ifs e 1 e 2 e 3 ) si e 1 es estático (ifs e 1 e 2 e 3 ) si e 1 es estático (ifd e 1 e 2 e 3 ) si e 1 es dinámico (ifd e 1 e 2 e 3 ) si e 1 es dinámico  operaciones (op e 1 … e n ) : (ops e 1 … e n ) si e 1 … e n son todos estáticos (ops e 1 … e n ) si e 1 … e n son todos estáticos (opd e 1 … e n ) en otro caso (opd e 1 … e n ) en otro caso

25 Optimización automática de programas (OAP) Germán Vidal 25 De divisiones a anotaciones (3) ¿Cuando hay que usar el nuevo operador lift ?¿Cuando hay que usar el nuevo operador lift ?  cuando e es una expresión estática que aparece en un “contexto dinámico”, e.g.: los argumentos de un calld / opd / ifd los argumentos de un calld / opd / ifd las alternativas de un ifs que está dentro de un contexto dinámico las alternativas de un ifs que está dentro de un contexto dinámico el cuerpo de la función principal el cuerpo de la función principal el cuerpo de una función con al menos un parámetro dinámico el cuerpo de una función con al menos un parámetro dinámico …  en estos casos, reemplazamos e con (lift e)

26 Optimización automática de programas (OAP) Germán Vidal 26 Ejercicio 5.1 (b) Anotad el programaAnotad el programa (define (power x n) (if (= n 0) (if (= n 0) 1 (* x (call power x (- n 1))) (* x (call power x (- n 1))) ) ) (define (power (n) (x)) // Lista de parametros (S) (D) (ifs (=s n 0) // Be n es S // el igual es estatico tambien 1 (*d x (calld power (-s n 1) (x))))) empleando la información obtenida en el BTA del Ejercicio 5.1 (a)

27 Optimización automática de programas (OAP) Germán Vidal 27 4.4. Algoritmo de especialización Datos de entrada:Datos de entrada:  programa anotado  valores de los parámetros estáticos de f 1 El algoritmo se basa en tres funciones:El algoritmo se basa en tres funciones:  specialize : inicialización  complete : nivel “global” (proceso iterativo)  reduce : nivel “local” (reducción simbólica)

28 Optimización automática de programas (OAP) Germán Vidal 28 función specialize specialize pgm vs = let (define (f 1 _ _) : _) = pgm (define (f 1 _ _) : _) = pgmin complete [(f 1 vs)] [] pgm complete [(f 1 vs)] [] pgm

29 Optimización automática de programas (OAP) Germán Vidal 29 función complete complete pending marked pgm = if pending==[] then [] else let (f vs) ‘in’ pending let (f vs) ‘in’ pending (define (f xs xd) e) = lookup f pgm (define (f xs xd) e) = lookup f pgm e vs = reduce e (xs++xd,vs++xd) pgm e vs = reduce e (xs++xd,vs++xd) pgm nmarked = (f vs) : marked nmarked = (f vs) : marked npending = pending npending = pending U (successors e vs ) – nmarked U (successors e vs ) – nmarked newdef = define ((f,vs) xd) e vs ) newdef = define ((f,vs) xd) e vs ) in newdef : complete npending nmarked pgm in newdef : complete npending nmarked pgm

30 Optimización automática de programas (OAP) Germán Vidal 30 función reduce (1) reduce e env pgm = case e of case e of Number n => n Quote c => c Var x => lookup x env Var x => lookup x env ifs e 1 e 2 e 3 => if (reduce e 1 env pgm) then (reduce e 2 env pgm) else (reduce e 3 env pgm) ifd e 1 e 2 e 3 => ’if (reduce e 1 env pgm) then (reduce e 2 env pgm) else (reduce e 3 env pgm)

31 Optimización automática de programas (OAP) Germán Vidal 31 función reduce (2) reduce e env pgm = case e of case e of... calls f es ed => let (define (f xs xd) e f ) = lookup f pgm let (define (f xs xd) e f ) = lookup f pgm res = reducelist (es++ed) env pgm res = reducelist (es++ed) env pgm in reduce e f (xs++xd,res) pgm in reduce e f (xs++xd,res) pgm calld f es ed => let (es’++ed’) = reducelist (es++ed) env pgm in ’call (f,es’) ed’ in ’call (f,es’) ed’

32 Optimización automática de programas (OAP) Germán Vidal 32 función reduce (3) reduce e env pgm = case e of case e of... ops es => let res = reducelist es env pgm let res = reducelist es env pgm in op res in op res opd es => let res = reducelist es env pgm let res = reducelist es env pgm in ’op res in ’op res lift e’ => ’quote (reduce e’ env pgm)

33 Optimización automática de programas (OAP) Germán Vidal 33 Ejercicio 5.1 (c) Obtener la versión especializada del programa del Ejercicio 5.1 (a) usando el programa anotado del Ejercicio 5.1 (b) y el valor n=3Obtener la versión especializada del programa del Ejercicio 5.1 (a) usando el programa anotado del Ejercicio 5.1 (b) y el valor n=3

34 Optimización automática de programas (OAP) Germán Vidal 34 4.5. Unfolding Tipos de unfolding:Tipos de unfolding:  on-the-fly: realizamos el desplegado de (algunas) llamadas en la función reduce  post-proceso: reduce nunca realiza el desplegado de una llamada a función (es decir, no existe el caso calls ),

35 Optimización automática de programas (OAP) Germán Vidal 35 Unfolding on-the-fly Permite obtener programas más especializados (y menos funciones residuales)Permite obtener programas más especializados (y menos funciones residuales) Pero se corre un mayor riesgo de que el proceso no termine…Pero se corre un mayor riesgo de que el proceso no termine… Ejemplo:Ejemplo: (power,3) x = x * x * x * 1

36 Optimización automática de programas (OAP) Germán Vidal 36 Unfolding como post-proceso Suele haber mucho menos riesgo de no terminaciónSuele haber mucho menos riesgo de no terminación Pero los programas están menos especializados y tienen más reglas residuales…Pero los programas están menos especializados y tienen más reglas residuales… Ejemplo:Ejemplo: (power,3) x = x * (power,2) x (power,2) x = x * (power,1) x (power,1) x = x * (power,0) x (power,0) x = 1 A partir de aquí el post-proceso tratará de obtener:A partir de aquí el post-proceso tratará de obtener: (power,3) x = x * x * x * 1

37 Optimización automática de programas (OAP) Germán Vidal 37 Estrategias unfolding on-the-fly No unfoldingNo unfolding  seguro, pero muy poco preciso Desplegar sólo las llamadas que tengan únicamente argumentos estáticosDesplegar sólo las llamadas que tengan únicamente argumentos estáticos  suele terminar, pero no siempre; buenos resultados en la mayor parte de los casos Uso de un wfo/wqo sobre argumentos estáticosUso de un wfo/wqo sobre argumentos estáticos  termina en el 99% de los casos; mejores resultados! Desplegar las llamadas que no estén dentro de un if dinámicoDesplegar las llamadas que no estén dentro de un if dinámico  muy buenos resultados en ejemplos “realistas”, no hay garantías de terminación

38 Optimización automática de programas (OAP) Germán Vidal 38 Ejercicio 5.2 (a) Obtened la especialización del programaObtened la especialización del programa (define (ack m n) (if (= m 0) (if (= m 0) (+ n 1) (+ n 1) (if (= n 0) (if (= n 0) (ack (- m 1) 1) (ack (- m 1) 1) (ack (- m 1) (ack m (- n 1))) (ack (- m 1) (ack m (- n 1))) ))) ))) con m estática ( m=2 ) y n dinámica (usamos la estrategia de unfolding de reduce )

39 Optimización automática de programas (OAP) Germán Vidal 39 Ejercicio 5.2 (b) ¿Qué problema tiene la estrategia de unfolding on-the-fly empleada?¿Qué problema tiene la estrategia de unfolding on-the-fly empleada?  Determina una estrategia de unfolding que de un resultado mejor…  Especializa de nuevo el programa usando dicha estrategia Supongamos que ahora especializamos el programa con m dinámica y n estáticaSupongamos que ahora especializamos el programa con m dinámica y n estática  Explica por qué un BTA da resultados tan innecesariamente malos  Esboza una posible solución…


Descargar ppt "Optimización automática de programas (OAP) Germán Vidal 1 Optimización automática de programas Tema 4: Evaluación parcial offline 4.1. Conceptos básicos."

Presentaciones similares


Anuncios Google