1 / 215

Optimizaciones Tradicionales

Optimizaciones Tradicionales. Simplificación Algebraica, Copy Propagation, y Constant Propagation. 40. Resumen. Overview de análisis de control de flujo Simplificación algebraica Copy Propagation Constant Propagation. Expresiones Disponibles. Dominio conjunto de expresiones

kaleb
Download Presentation

Optimizaciones Tradicionales

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation

  2. 40 Resumen • Overview de análisis de control de flujo • Simplificación algebraica • Copy Propagation • Constant Propagation 2

  3. Expresiones Disponibles • Dominio • conjunto de expresiones • Dirección de flujo de datos Hacia adelante • Función de flujo de datos • OUT = gen  (IN - kill) • gen = { a | a se calcula en el bloque básico } • kill = { a |  una variable va que es definida en el b.b. } • Operación Meet • IN =  OUT • Valores iniciales conjunto entero (Top) 3

  4. Cadena DU (Reaching Definitions) • Dominio • conjunto de definiciones • Dirección de flujo de datos Hacia adelante • Función de flujo de datos • OUT = gen  (IN - kill) • gen = { x | x es definida en el statement} • kill = { x | LHS var. de x es redefinido en el statement. } • Operación Meet • IN =  OUT • Valores iniciales Conjunto vacío (Bottom) 4

  5. Framework para análisis • Análisis de control de flujo • Identificar la estructura del programa • Ayuda a construir el análisis de flujo de datos • Análisis de flujo de datos • Framework para encontrar la información necesaria para optimizar • Hasta ahora hemos encontrado • expresiones disponibles • cadenas UD y DU • ¡Ahora usemos esta información para hacer algo interesante! 5

  6. Optimizaciones • Cada optimización es muy simple • Reduce la complejidad • Se necesitan múltiples optimizaciones • Es posible que haya que aplicar la misma optimización múltiples veces 6

  7. 40 Resumen • Overview de análisis de control de flujo • Simplificación algebraica • Copy Propagation • Constant Propagation 7

  8. Simplificación algebraica • Aplicar nuestro conocimiento de algebra, teoría de números, etc para simplificar expresiones 8

  9. Simplificación algebraica • Aplicar nuestro conocimiento de algebra, teoría de números, etc para simplificar expresiones • Ejemplo • a + 0  a • a * 1  a • a / 1  a • a * 0  0 • 0 - a  -a • a + (-b)  a - b • -(-a)  a 9

  10. Simplificación algebraica • Aplicar nuestro conocimiento de algebra, teoría de números, etc para simplificar expresiones • Ejemplo • a  true  a • a  false  false • a  true  true • a  false  a 10

  11. Simplificación algebraica • Aplicar nuestro conocimiento de algebra, teoría de números, etc para simplificar expresiones • Ejemplo • a ^ 2  a*a • a * 2  a + a • a * 8  a << 3 11

  12. Oportunidades para Simplificación Algebraica • En el código • Los programadores no simplifican expresiones • Los programas son más legibles con exresiones completas • Luego de la expansión del compilador • Ejemplo: Lectura de array A[8][12] va a ser expandida a: • *(Abase + 4*(12 + 8*256)) que puede ser simplificada después de otras optimizaciones 12

  13. Utilidad de Simplificación Algebraica • Reduce el número de instrucciones • Usa expresiones menos “caras” • Habilita otras optimizaciones 13

  14. Implementación • ¡No es una optimización de flujo de datos! • Encontrar candidatos que hagan match con las reglas de simplificación y simplificar los árboles de expresión • Los candidatos pueden no ser obvios 14

  15. Implementación • ¡No es una optimización de flujo de datos! • Encontrar candidatos que hagan match con las reglas de simplificación y simplificar los árboles de expresión • Los candidatos pueden no ser obvios • Ejemploa + b - a + - a a b 15

  16. Usar nuestro conocimiento de los operadores • Operadores conmutativos • a op b = b op a • Operadores asociativos • (a op b) op c = b op (a op c) 16

  17. Forma Canónica • Poner los árboles de expresiones en forma canónica • Suma de multiplicandos • Ejemplo • (a + 3) * (a + 8) * 4  4*a*a + 44*a + 96 • La Sección 12.3.1 de la ballena habla de esto 17

  18. Efectos en la estabilidad numérica • Algunas simplificaciones algebraicas pueden producir resultados incorrectos 18

  19. Efectos en la estabilidad numérica • Algunas simplificaciones algebraicas pueden producir resultados incorrectos • Ejemplo • (a / b)*0 + c 19

  20. Efectos en la estabilidad numérica • Algunas simplificaciones algebraicas pueden producir resultados incorrectos • Ejemplo • (a / b)*0 + c • Podemos simplificar esto a c 20

  21. Efectos en la estabilidad numérica • Algunas simplificaciones algebraicas pueden producir resultados incorrectos • Ejemplo • (a / b)*0 + c • Podemos simplificar esto a c • Pero qué pasa cuándo b = 0debería ser una excepción, pero vamos a obtener un resultado 21

  22. 40 Resumen • Overview de análisis de control de flujo • Simplificación algebraica • Copy Propagation • Constant Propagation 22

  23. Copy Propagation • Eliminar copias múltiples • propagar el valor directamente a su uso • Ejemplo a = b + c d = a e = d f = d + 2*e + c 23

  24. Copy Propagation • Eliminar copias múltiples • propagar el valor directamente a su uso • Ejemplo a = b + c d = a e = d f = d + 2*e + c 24

  25. Copy Propagation • Eliminar copias múltiples • propagar el valor directamente a su uso • Ejemplo a = b + c d = a e = a f = d + 2*e + c 25

  26. Copy Propagation • Eliminar copias múltiples • propagar el valor directamente a su uso • Ejemplo a = b + c d = a e = a f = d + 2*e + c 26

  27. Copy Propagation • Eliminar copias múltiples • propagar el valor directamente a su uso • Ejemplo a = b + c d = a e = a f = a + 2*e + c 27

  28. Copy Propagation • Eliminar copias múltiples • propagar el valor directamente a su uso • Ejemplo a = b + c d = a e = a f = a + 2*e + c 28

  29. Copy Propagation • Eliminar copias múltiples • propagar el valor directamente a su uso • Ejemplo a = b + c d = a e = a f = a + 2*a + c 29

  30. Copy Propagation • Eliminar copias múltiples • propagar el valor directamente a su uso • Ejemplo a = b + c d = a e = a f = a + 2*a + c 30

  31. Oportunidades para Copy Propagation • En código del usuario • Después de otras optimizaciones • Ejemplo: Simplificación algebraica 31

  32. Ventajas de Copy Propagation • Lleva a más simplificaciones algebraicas 32

  33. Ventajas de Copy Propagation • Lleva a más simplificaciones algebraicas • Ejemplo a = b + c d = a e = a f = a + 2*a + c 33

  34. Ventajas de Copy Propagation • Lleva a más simplificaciones algebraicas • Ejemplo a = b + c d = a e = a f = a + 2*a + c 34

  35. Ventajas de Copy Propagation • Lleva a más simplificaciones algebraicas • Ejemplo a = b + c d = a e = a f = 3*a + c 35

  36. Ventajas de Copy Propagation • Reduce instrucciones al eliminar ops de copia • Crea código muerto que puede ser eliminado 36

  37. Ventajas de Copy Propagation • Reduce instrucciones al eliminar ops de copia • Crea código muerto que puede ser eliminado • Ejemplo a = b + c d = a e = a f = 3*a + c 37

  38. Ventajas de Copy Propagation • Reduce instrucciones al eliminar ops de copia • Crea código muerto que puede ser eliminado • Ejemplo a = b + c f = 3*a + c 38

  39. Cómo hacer copy propagation • Para cada expresión RHS Para cada variable v usada en expresión RHS • si la variable v es definida por un statement v = u • reemplazar la variable v por u • En cada punto del programa hay que saber • qué variables son iguales • un elemento <u,v> está en el conjunto ssi v = u (u, v son variables) 39

  40. Cómo hacer copy propagation • Una asignación v = u todavía es válida en un punto dado de ejecución ssi • Un statement v = u occurre en cada camino de ejecución que llega al punto actual • La variable v no es redefinida en ninguno de estos caminos de ejecución entre el statement y el punto actual • La variable u no es redefinida en ninguno de caminos de ejecución entre el statement y el punto actual • ¡un problema de flujo de datos! 40

  41. Problema de Data-Flow paraCopy Propagation • Dominio • Conjunto de tuplas <v,u> representando un statement v = u • Dirección de flujo de datos Hacia adelante • Función de flujo de datos • OUT = gen  (IN - kill) • gen = { <v,u> | v = u es el statement } • kill = { <v,u> | LHS var. del stmt. es v ó u } • Operación Meet • IN =  OUT • Valores Iniciales Conjunto vacio (Bottom) 41

  42. Ejemplo b = a c = b + 1 d = b b = d + c b = d 42

  43. gen = { <v,u> | v = u es el statement } • kill = { <v,u> | LHS var. del stmt. es v ó u } b = a c = b + 1 d = b b = d + c b = d 43

  44. gen = { <v,u> | v = u es el statement } • kill = { <v,u> | LHS var. del stmt. es v ó u } b = a c = b + 1 d = b b = d + c b = d gen = { <b,a> } gen = { } gen = { <d,b> } gen = { } gen = { <b,d> } 44

  45. gen = { <v,u> | v = u es el statement } • kill = { <v,u> | LHS var. del stmt. es v ó u } b = a c = b + 1 d = b b = d + c b = d gen = { <b,a> } kill = { <d,b>, <b,d> } gen = { } kill = { } gen = { <d,b> } kill = { <b,d> } gen = { } kill = { <b,a> <d,b>, <b,d> } gen = { <b,d> } kill = { <b,a>, <d,b> } 45

  46. OUT = gen  (IN - kill) b = a c = b + 1 d = b b = d + c b = d gen = { <b,a> } kill = { <d,b>, <b,d> } gen = { } kill = { } gen = { <d,b> } kill = { <b,d> } gen = { } kill = { <b,a> <d,b>, <b,d> } gen = { <b,d> } kill = { <b,a>, <d,b> } 46

  47. OUT = gen  (IN - kill) IN = { } b = a c = b + 1 d = b b = d + c b = d gen = { <b,a> } kill = { <d,b>, <b,d> } OUT = { <b,a> } gen = { } kill = { } gen = { <d,b> } kill = { <b,d> } gen = { } kill = { <b,a> <d,b>, <b,d> } gen = { <b,d> } kill = { <b,a>, <d,b> } 47

  48. OUT = gen  (IN - kill) IN = { } b = a c = b + 1 d = b b = d + c b = d gen = { <b,a> } kill = { <d,b>, <b,d> } IN = { <b,a> } gen = { } kill = { } OUT = { <b,a> } gen = { <d,b> } kill = { <b,d> } gen = { } kill = { <b,a> <d,b>, <b,d> } gen = { <b,d> } kill = { <b,a>, <d,b> } 48

  49. OUT = gen  (IN - kill) IN = { } b = a c = b + 1 d = b b = d + c b = d gen = { <b,a> } kill = { <d,b>, <b,d> } IN = { <b,a> } gen = { } kill = { } IN = { <b,a> } gen = { <d,b> } kill = { <b,d> } OUT = { <b,a>, <d,b> } gen = { } kill = { <b,a> <d,b>, <b,d> } gen = { <b,d> } kill = { <b,a>, <d,b> } 49

  50. OUT = gen  (IN - kill) IN = { } b = a c = b + 1 d = b b = d + c b = d gen = { <b,a> } kill = { <d,b>, <b,d> } IN = { <b,a> } gen = { } kill = { } IN = { <b,a> } gen = { <d,b> } kill = { <b,d> } IN = { <b,a>, <d,b> } gen = { } kill = { <b,a> <d,b>, <b,d> } OUT = { } gen = { <b,d> } kill = { <b,a>, <d,b> } 50

More Related