Compiladores Asignacin de Registros Resumen Qu es asignacin
- Slides: 104
Compiladores Asignación de Registros
Resumen • • ¿Qué es asignación de registros? Un asignador de registros simple Webs Grafos de interferencia Coloreando grafos Splitting Más optimizaciones 2
Asignación de Registros • Usar de forma óptima uno de los recursos más críticos del procesador • Asignación de variables (hasta ahora en memoria) a registros de hardware – Pseudo registros: número ilimitado de registros virtuales, es espacio se asigna normalmente en el stack – Registros reales: conjunto de registros disponibles en el procesador 3
Importancia de Asignación de Registros • Sólo hay un número finito y pequeño de registros disponibles – Usualmente 32 registros enteros y 32 de punto flotante – Algunos de esos registros tienen usos fijos (r 0, ra, sp, fp) • El acceso a registros es mucho más rápido que el acceso a memoria – La diferencia es mucho más grande en procesadores modernos • Menos instrucciones cuándo usamos registros – La mayoría de instrucciones son registro-a-registro – Se necesitan instrucciones adicionales para llevar los datos de memoria a un registro 4
Importancia de Asignación de Registros • Permite otras optimizaciones – CSE asume que las variables están en registros • Asignación de registros tiene un impacto directo en el rendimiento – Afecta casi todo statement del programa – Elimina instrucciones caras de memoria – El # de instrucciones baja debido a la manipulación directa de registros (no hay necesidad de instrucciones load/store) – ¡Es probablemente la optimización que tiene el mayor impacto! 5
¿Qué se puede poner en un registro? • Variables escalares • Constantes grandes • Algunos elementos de arreglos y campos de records • El conjunto de registros depende del tipo de datos – floating-point en registros fp – fixed-point en registros enteros 6
Resumen • • ¿Qué es asignación de registros? Un asignador de registros simple Webs Grafos de interferencia Coloreando grafos Splitting Más optimizaciones 7
Un asignador de registros simple “siempre o nunca” • Estimar el beneficio de poner cada variable en un registro para un bloque básico en particular – costo(var, bb) = número de usos y definiciones de la variable. • Estimar el beneficio general – Costo. Total(var) = costo(var, bb)*freq(bb) para todo bb • Assignar las R variables de mayor beneficio a registros 8
Ejemplo def z use z def x def y use x use y use z 9
Ejemplo • Costo para bloques básicos – – – – – costo(x, bb 1) = 0 costo(x, bb 2) = 3 costo(x, bb 3) = 0 costo(y, bb 1) = 0 costo(y, bb 2) = 2 costo(y, bb 3) = 0 costo(z, bb 1) = 2 costo(z, bb 2) = 0 costo(z, bb 3) = 1 def z use z def x def y use x use y use z 10
Ejemplo • Costo para bloques básicos – costo(x, bb 1) = 0 • Frecuencia – – – – costo(x, bb 2) = 3 costo(x, bb 3) = 0 costo(y, bb 1) = 0 costo(y, bb 2) = 2 costo(y, bb 3) = 0 costo(z, bb 1) = 2 costo(z, bb 2) = 0 costo(z, bb 3) = 1 – freq(bb 1) = 1 – freq(bb 2) = 100 – freq(bb 3) = 1 def z use z def x def y use x use y use z 11
Ejemplo • Costo para bloques básicos – costo(x, bb 1) = 0 • Frecuencia – – – – costo(x, bb 2) = 3 costo(x, bb 3) = 0 costo(y, bb 1) = 0 costo(y, bb 2) = 2 costo(y, bb 3) = 0 costo(z, bb 1) = 2 costo(z, bb 2) = 0 costo(z, bb 3) = 1 – freq(bb 1) = 1 – freq(bb 2) = 100 – freq(bb 3) = 1 • Costo total def z use z def x def y use x use y use z – Costo. Total(x) = 0*1 + 3*100 + 0*1 = 300 – Costo. Total(y) = 0*1 + 2*100 + 0*1 = 200 – Costo. Total(z) = 3*1 + 0*100 + 1*1 = 4 12
Ejemplo • Costo total def z use z – Costo. Total(x) = 300 – Costo. Total(y) = 200 – Costo. Total(z) = 4 • Asumimos que hay 2 registros disponibles – Asignamos x e y a registros def x def y use x use y use z 13
Problema 1 • Asignación es igual que antes – x e y van en registros, z no • Las variables ocupan el registro incluso cuándo no lo necesitan • Todas (x, y, & z) pueden tener registros def z use z def x def y use x use y def z use z 14
Problema 1 xyz • Asignación es igual que antes – x e y van en registros, z no • Las variables ocupan el registro incluso cuándo no lo necesitan • Todas (x, y, & z) pueden tener registros def z use z def x def y use x use y def z use z 15
Problema 1 xyz • Asignación es igual que antes – x e y van en registros, z no • Las variables ocupan el registro incluso cuándo no lo necesitan • Todas (x, y, & z) pueden tener registros def z use z r 1 r 2 def x r 1 def y use x use y r 1 def z use z 16
Problema 2 • Incluso las variables que no se interfieren no pueden compartir registros 17
Problema 2 • Incluso las variables que no se interfieren no pueden compartir registros { int x; … } { int y; … } 18
Problema 2 • Incluso las variables que no se interfieren no pueden compartir registros { int x; … } { int y; … } • x e y pueden usar el mismo registro 19
Problema 3 • Diferentes fases del programa se comportan de distinta forma def & use x use & use y • Un registro disponible use & def x – registro para x en el primer loop – registro para y en el segundo loop – no nos importa mucho el resto • Tenemos que “derramar” (spill) – todo o nada no va a funcionar 20 use & def y use x use y
Lo que un asignador inteligente debe hacer • Determinar rangos para cada variable en los que haya beneficio al usar un registro (webs) • Determinar cuáles de estos rangos se traslapan (interference) • Encontrar los beneficios de mantener cada variable en un registro (spill cost) • Decidir cuáles webs obtienen un registro (allocation) • Dividir webs si es necesario (spilling and splitting) • Asignar registros reales a webs (assignment) • Generar código incluyendo spills (code generation) 21
Resumen • • ¿Qué es asignación de registros? Un asignador de registros simple Webs Grafos de interferencia Coloreando grafos Splitting Más optimizaciones 22
Webs • Lo que debe ser memorizado es el valor • dividir accesos a variables en múltiples webs – Todas las definiciones que llegan a un uso en mismo web – Todos los usos que usan el valor definido en mismo web – Dividir la variable en rangos de vida • Implementación: Usar cadenas DU – Una cadena du conecta la definición a todos los usos que alcanza esta definición – Un web combina las cadenas du que contienen un uso común 23
Ejemplo def y def x def y use x use y def x use y use x def x use x 24
Ejemplo def y def x def y use x use y def x use y use x def x use x 25
Ejemplo def y def x def y use x use y def x use y use x def x use x 26
Ejemplo def y def x def y use x use y def x use y use x def x use x 27
Ejemplo def y def x def y use x use y def x use y use x def x use x 28
Ejemplo def y def x def y use x use y def x use y use x def x use x 29
Ejemplo def y def x def y use x use y def x use y use x def x use x 30
Ejemplo def y def x def y use x use y s 3 def x use y s 2 use x def x s 4 use x 31 s 1
Webs • En dos webs de la misma variable: – Ningún uso en un web va a usar nunca un valor definido por el otro web – Por lo tanto, ningún valor necesita ser llevado entre webs – Cada web puede ser tratada independientemente • Web es usado como la unidad de asignación de registros – Si se le asigna un registro a un web, todos los usos y definiciones dentro del web no necesitan load ni store de memoria – Diferentes webs pueden ser asignados a diferentes registros o uno a un registro y otro a memoria 32
Resumen • • ¿Qué es asignación de registros? Un asignador de registros simple Webs Grafos de interferencia Coloreando grafos Splitting Más optimizaciones 33
Interferencia • Dos webs interfieren si el rango de vida de dos webs se traslapa en el tiempo • Webs que no se interfieren pueden ser asignados al mismo registro 34
Ejemplo def y def x def y use x use y s 3 def x use y s 2 use x def x s 4 use x 35 s 1
Ejemplo def y def x def y use x use y s 3 def x use y s 2 use x def x s 4 use x 36 s 1
Ejemplo Webs s 1 y s 2 interfieren Webs s 2 y s 3 interfieren def x def y use x use y s 3 def y def x use y s 2 use x def x s 4 use x 37 s 1
Grafo de Interferencia • Representación de webs y sus interferencias – Nodos son webs – Existe una arista entre nodos si estos interfieren 38 s 1 s 2 s 3 s 4
Ejemplo def y def x def y use x use y s 3 s 1 def x use y s 2 use x def x s 1 s 2 s 3 s 4 use x 39
Ejemplo Webs s 1 y s 2 interfieren Webs s 2 y s 3 interfieren def x def y use x use y s 3 def y s 1 def x use y s 2 use x def x s 1 s 2 s 3 s 4 use x 40
Resumen • • ¿Qué es asignación de registros? Un asignador de registros simple Webs Grafos de interferencia Coloreando grafos Splitting Más optimizaciones 41
Asignación de Registros usando Graph Coloring • A cada web se le asigna un registro – cada nodo obtiene un registro (color) • Si dos webs interfieren no pueden usar el mismo registro – si dos nodos tienen una arista entre ellos, no pueden tener el mismo color 42 s 1 s 2 s 3 s 4
Graph Coloring • ¿Cuál es el número mínimo de colores con el que se pueden colorerar los nodos del grafo tal que cualesquiera nodos conectados mediante una arista no tengan el mismo color? • Problema clásico en teoría de grafos 43
Ejemplo de Graph Coloring 44
Ejemplo de Graph Coloring • 1 Color 45
Ejemplo de Graph Coloring 46
Ejemplo de Graph Coloring • 2 Colores 47
Ejemplo de Graph Coloring 48
Ejemplo de Graph Coloring • Todavía 2 Colores 49
Ejemplo de Graph Coloring 50
Ejemplo de Graph Coloring • 3 Colores 51
Heuristicas para Colorear Registros • Coloreando un grafo con N colores • Si grado < N (grado de un nodo = # de aristas) – Nodo siempre puede ser coloreado – Luego de colorear el resto de los nodos va a quedar al menos un color para colorear el nodo actual • Si grado >= N – Puede que todavía sea coloreable con N colores – Solución exacta es NP complete 52
Heuristicas para Colorear Registros • Eliminar nodos que tengan grado < N – meter los nodos eliminados a un stack • Si todos los nodos tienen grado >= N – encontrar un nodo para “spill” (no hay color para ese nodo) – eliminar ese nodo • Cuando esté vacío, comenzamos a colorerar – sacar un nodo del stack – asignarle un color que sea diferente de sus nodos conectados (como el grado < N, debe existir un color) 53
Ejemplo de Colorear N=3 s 1 s 2 s 0 s 3 s 4 54
Ejemplo de Colorear N=3 s 1 s 2 s 0 s 3 s 4 55
Ejemplo de Colorear N=3 s 1 s 2 s 0 s 4 s 3 s 4 56
Ejemplo de Colorear N=3 s 1 s 2 s 0 s 2 s 4 s 3 s 4 57
Ejemplo de Colorear N=3 s 1 s 2 s 0 s 1 s 2 s 4 s 3 s 4 58
Ejemplo de Colorear N=3 s 1 s 2 s 4 s 0 s 3 s 4 59
Ejemplo de Colorear N=3 s 1 s 2 s 4 s 0 s 3 s 4 60
Ejemplo de Colorear N=3 s 1 s 2 s 4 s 0 s 3 s 4 61
Ejemplo de Colorear N=3 s 1 s 2 s 0 s 1 s 2 s 4 s 3 s 4 62
Ejemplo de Colorear N=3 s 1 s 2 s 0 s 1 s 2 s 4 s 3 s 4 63
Ejemplo de Colorear N=3 s 1 s 2 s 0 s 2 s 4 s 3 s 4 64
Ejemplo de Colorear N=3 s 1 s 2 s 0 s 2 s 4 s 3 s 4 65
Ejemplo de Colorear N=3 s 1 s 2 s 0 s 4 s 3 s 4 66
Ejemplo de Colorear N=3 s 1 s 2 s 0 s 4 s 3 s 4 67
Ejemplo de Colorear N=3 s 1 s 2 s 0 s 3 s 4 68
Ejemplo de Colorear N=3 s 1 s 2 s 0 s 3 s 4 69
Otro Ejemplo de Colorear N=3 s 1 s 2 s 0 s 3 s 4 70
Otro Ejemplo de Colorear N=3 s 1 s 2 s 0 s 4 s 3 s 4 71
Otro Ejemplo de Colorear N=3 s 1 s 2 s 0 s 4 s 3 s 4 72
Otro Ejemplo de Colorear N=3 s 1 s 2 s 0 s 3 s 4 73
Otro Ejemplo de Colorear N=3 s 1 s 2 s 3 s 4 s 0 s 3 s 4 74
Otro Ejemplo de Colorear N=3 s 1 s 2 s 3 s 4 s 0 s 3 s 4 75
Otro Ejemplo de Colorear N=3 s 1 s 2 s 3 s 4 s 0 s 3 s 4 76
Otro Ejemplo de Colorear N=3 s 1 s 2 s 0 s 3 s 4 77
Otro Ejemplo de Colorear N=3 s 1 s 2 s 0 s 3 s 4 78
Otro Ejemplo de Colorear N=3 s 1 s 2 s 0 s 4 s 3 s 4 79
Otro Ejemplo de Colorear N=3 s 1 s 2 s 0 s 4 s 3 s 4 80
Otro Ejemplo de Colorear N=3 s 1 s 2 s 0 s 3 s 4 81
Otro Ejemplo de Colorear N=3 s 1 s 2 s 0 s 3 s 4 82
Resumen • • ¿Qué es asignación de registros? Un asignador de registros simple Webs Grafos de interferencia Coloreando grafos Splitting Más optimizaciones 83
Spilling y Splitting • Cuándo el grafo no es N-coloreable • Seleccionamos un web para “spill” – Encontrar el web de menor costo de spill – Los usos y definiciones de ese web son leidos y escritos a memoria • Dividir el web (Split) – Dividir un web en múltiples webs para que haya menos interferencias en el grafo volviendolo N-coloreable – Derramar (spill) el valor a memoria y cargarlo de regreso en los puntos donde se dividió el web 84
Ejemplo de Splitting xyz def z use z def x def y use x use y use z 85
Ejemplo de Splitting xyz def z use z def x def y use x use y x y z use z 86
Ejemplo de Splitting xyz def z use z def x def y use x use y x y z use z 87 ¿ 2 -coloreable?
Ejemplo de Splitting xyz def z use z def x def y use x use y x y z use z ¿ 2 -coloreable? ¡No! 88
Ejemplo de Splitting xyz def z use z def x def y use x use y use z 89
Ejemplo de Splitting xyz def z use z def x def y use x use y use z 90
Ejemplo de Splitting xyz def z use z z 1 def x def y use x use y x y z 2 use z 91
Ejemplo de Splitting xyz def z use z z 1 def x def y use x use y x y z 2 use z 92 ¿ 2 -coloreable?
Ejemplo de Splitting xyz def z use z z 1 def x def y use x use y x y z 2 use z ¿ 2 -coloreable? ¡Sí! 93
Ejemplo de Splitting xyz def z use z def x def y use x use y r 1 r 2 r 1 x r 1 use z z 1 y z 2 ¿ 2 -coloreable? ¡Sí! 94
Ejemplo de Splitting def z use z str z def x def y use x use y xyz r 1 r 2 r 1 x r 1 ld z use z 95 z 1 y z 2 ¿ 2 -coloreable? ¡Sí!
Splitting • Identificar un punto en el programa donde el grafo no es R-coloreable (punto donde # de webs > N) – Elegir un web que no es usado en el bloque envolvente más grande al rededor de ese punto en el programa – Dividir ese web (split) – Rehacer el grafo de interferencia – Tratar de re colorear el grafo 96
Costo y beneficio de splitting • Costo de dividir un nodo – Proporcional al número de veces que la arista dividida tenga que ser cruzada dinámicamente – Estimable mediante anidamiento de loops • Beneficios – Aumenta la colorabilidad de los nodos con los que interfiere el web que dividimos – Puede aproximarse por su grado en el grafo de interferencia • Heuristica ambiciosa – Elegir el rango de vida con la mayor razón beneficio/costo para dividir 97
Resumen • • ¿Qué es asignación de registros? Un asignador de registros simple Webs Grafos de interferencia Coloreando grafos Splitting Más optimizaciones 98
Otras Optimizaciones • • Register coalescing Register targeting (pre-coloring) Presplitting of webs Interprocedural register allocation 99
Register Coalescing • Encontrar instrucciones de copia de registros como sj = si • Si sj y si no interfieren, combinar sus webs • Pros – similar a copy propagation – reduce el número de instrucciones • Cons – puede incrementar el grado del nodo combinado – un grafo coloreable se puede volver incoloreable 100
Register Targeting (pre-coloring) • Algunas variables tienen que estar en registros especiales en momentos determinados – primeros 4 argumentos de una función – valor de retorno • Pre-colorear esos webs y asociarlos al registro adecuado • Elimina instrucciones de copia innecesarias 101
Pre-splitting de webs • Algunos rangos de vida tienen regiones “muertas” muy grandes – Región grande donde la variable no es usada • Romper los rangos de vida – hay que pagar un pequeño costo de spilling – pero el grafo va ser mucho más fácil de colorear • Podemos encontrar localidades estratégicas para romperlos – en un punto de llamada (hay que hacer spill de todas formas) – al rededor de un loop grande (reservar registros para valores usados dentro del loop) 102
Interprocedural register allocation • Guardar registros en llamdas a procedimientos es caro – especialmente para programas con muchas funciones pequeñas • Convenciones de llamado son muy generales e ineficientes • Customizar las convenciones de llamado por función mediante asignación de registros interprocedural 103
Lecturas • Ballena – Capítulo 16 104
- Asignacin
- Ass compilación
- Curso expresiones regulares
- Compiladores
- Gramáticas libres de contexto (glc)
- Curso de compiladores
- Registros comunicativos
- Vision tripartita del lenguaje
- Registros electricos
- Que es sir
- Cual es la estructura de la epopeya
- Modelo de registro
- Registros de enfermagem
- Inculto formal e informal
- El registro lingüístico
- Que es lenguaje formal e informal
- Formularios y registros de contabilidad
- Observação e registro na educação infantil
- Transferencia de registros
- Dcv registros
- Uso de registros
- Summary of the black cat
- Nif b 8
- La iliada resumen
- Moral de kant resumen
- Decreto 67 resumen
- Pitas payas resumen
- Tipos de mini atletismo
- Primera guerra mundial resumen
- Fuenteovejuna de lope de vega tiene como contexto
- El islam conclusión
- Resumen el asesinato del profesor de matematicas
- Construye t 2.3 amigos de mi futuro
- Pasión y muerte de jesús resumen
- Escuela biblica hechos 2
- Iglesia de colosa
- La historia de ron clark
- Ejemplos de imaginario social
- Historia del voleibol nacional ecuador
- La condesita
- Nif c-8 activos intangibles 2021
- Gioconda belli
- Balada de los dos abuelos
- Donde esta mi cabeza resumen
- Resumen de mac el microbio desconocido
- Seccion 20
- Resumen parasha tetzave
- Los profetas resumen
- Resumen del caso marbury vs madison
- Paradigma de la sociologia
- Rousseau estado de naturaleza
- Romance del rey moro que perdio alhama resumen
- Conferencia episcopal de aparecida
- La ropa nueva del hijo pródigo
- Que es el genoma humano
- Historia de una escalera
- El rey y sus 4 esposas
- Modernidad líquida resumen
- La edad moderna resumen
- Medidas de resumen para variables cuantitativas
- Personajes los invasores
- Informacion de la prehistoria
- Ay de mi alhama autor
- Resumen de la velocidad
- Resumen del liberalismo económico
- Caracteristicas del colonialismo
- Que es el marxismo resumen
- Segunda de corintios 1517
- La celestina argumento
- Que es un resumen de trabajo
- Corriente literaria
- El verdadero amor de hermanos
- L
- Libro de urantia resumen
- Autor del evangelio de marcos
- Antiguas cacerías resumen
- Pierre thuillier la trastienda del sabio resumen
- Atila resumen
- Estado social de derecho colombiano
- Historia del futbol resumen para niños
- El pecado resumen
- Resumen de la revolucion industrial
- Apa 6
- Segunda ley de newton slideshare
- The mask you live in resumen
- Estructura de la ley 070
- Que es paleolitico resumen
- Sociologia de la educacion durkheim
- Observersion
- Personajes de la lengua de las mariposas
- Medidas de resumen
- Tema central de efesios
- Australopithecus bahrelghazali capacidad craneal
- El enamorado y el otro personajes principales
- Louis pasteur experimento
- Retírate joven y rico resumen
- Exodo 31
- El arca de noé resumen
- El misterio de la isla de tökland resumen
- Carta de despedida gabriel garcía márquez wikipedia
- Danilo mora
- Juan 2 resumen
- Modificador directo
- Endomembranas
- Cristo paleocristiano