Академический Документы
Профессиональный Документы
Культура Документы
registros en un compilador
Primera Parte
Esteban Meneses y Francisco Torres
emeneses@artinsoft.com
torres@ic-itcr.ac.cr
Se presenta la descripcin del teorema de los cuatro colores, cuestionante que gener muchas
discusiones en matemticas y que impuls algunas tcnicas de coloreo de mapas. Adems, se
hace un recorrido por el algoritmo de Gregory Chaitin para la asignacin de registros por
medio del coloreo de grafos. Esta tcnica resulta bastante sencilla y muy poderosa a la vez,
pues logra integrar la asignacin de registros y el vaciado de los mismos en un solo proceso.
Palabras clave: compiladores, optimizacin, asignacin de registros, vaciado de registros,
coloreo de grafos, grafos de interferencia.
ara representar los problemas y las soluciones a los mismos, los programadores utilizan los lenguajes de programacin. Una herramienta indispensable, sin lugar a dudas. Sin embargo, para poder aprovechar el poder de
los lenguajes, se necesita un chasis que soporte la velocidad de los mismos.
Esta estructura, que subyace en cualquier lenguaje, la conforman los compiladores y los
intrpretes.
Cualquiera de estos dos programas tiene una funcin bien definida: traducir un
cdigo de un lenguaje a otro. La mayor parte de los casos, la compilacin traduce un
lenguaje de alto nivel (el fuente o front-end) a otro de un nivel menor (el destino o backend, que probablemente es el lenguaje de una mquina, virtual o fsica). El compilador
es entonces, un fantasma necesario en la mansin de los lenguajes. Pero el diseo de este
actor silencioso requiere mucho trabajo. De hecho, especificar y desarrollar un lenguaje
es en realidad construir todo un motor de compilacin mediante el cual este lenguaje
tendr utilidad en alguna mquina [1].
Paralelo al concepto de utilidad est presente otro de igual importancia: eficiencia.
En su manera ms sencilla, la eficiencia es la mejora del tiempo de un trabajo sin que
empeore su calidad. El cdigo generado por un compilador debe ser eficiente, para que
los usuarios del sistema sean igualmente eficientes. Una manera de incrementar la
eficiencia del cdigo generado es mejorando muchos de los procesos que estn insertos
dentro de todo el programa. Estas mejoras se llaman optimizaciones (aunque el trmino
sea discutible).
Existe una gran cantidad de tales optimizaciones [6], entre ellas: eliminacin de
operaciones innecesarias (como eliminacin de sub-expresiones comunes, identificacin
de cdigo inalcanzable, optimizacin de saltos), determinacin de operaciones costosas
(uso de instrucciones menos costosas, operacin y propagacin de constantes, sustitucin
de cdigo), calendarizacin de instrucciones (que es un problema NP-completo [2]),
1
asignacin y vaciado de registros .
La asignacin de registros juega un papel preponderante en toda la familia de
mejoras al cdigo generado por un compilador.
Qu relacin
hay entre un
mapa de
Inglaterra que
deba ser
coloreado en
1852 y tcnicas
modernas de
asignacin de
registros en un
compilador?
Abril 2001
Los trminos en ingls para estos procesos son register allocation y register spilling, respectivamente.
Tiempo Compartido
Abril 2001
por medio del coloreo de grafos. Tienen relacin esos dos temas? Claro que
s, y ah reside precisamente la belleza
de esta propuesta. En general, la idea
es colorear un grafo de dependencias de
los rangos de vida de las variables que
aparecen en la representacin intermedia (IR). Los rangos de vida se refieren
a los lapsos en que est viva una
variable. Por ejemplo, en un programa
en IR, la variable X (que en este caso
sera un registro simblico) se define
en la quinta instruccin: X=6+Y. Luego,
la variable X es usada varias veces,
hasta que en la vigsima instruccin se
utiliza por ltima vez: Z=X2. Entonces
todo ese lapso de la quinta a la
vigsima instruccin es el rango de
vida de X, porque X en ese lapso tiene
sentido para el programa, est viva!
Despus del ltimo uso de X, sta
pierde la importancia y por ende
no tiene caso considerarla ms. Ahora,
si dos variables interfieren, es decir
hay una instruccin donde ambas
estn vivas, no pueden ser asignadas
al mismo registro
real porque esto claramente entorpecera la corrida del
Figura 1: 4-coloracin de una seccin de Europa
programa.
Entonces, el primer paso que se debe seguir en el
procesamiento de un programa escrito
La propuesta de Chaitin
en IR, debe ser el de usar las bien
Las ideas de Gregory Chaitin forman la conocidas tcnicas de anlisis de flujo
columna vertebral de muchas investi- de datos [5]. Este anlisis consiste en
gaciones que se han hecho al respecto saber cuando empieza y cuando terde la asignacin de registros. La gran mina cada uno de los rangos de vida de
virtud de su propuesta es que logra variables en IR.
El paso que sigue es la construccin
integrar el problema de la asignacin y
del
grafo de interferencia G. Los nodos
el vaciado de registros en un algoritmo
en
G
representan los rangos de vida de
sencillo.[4] Chaitin y su equipo desalas
variables
y los arcos representan
rrollaron el asignador como parte de un
interferencia.
As,
hay un arco en G del
compilador para PL8 en el laboratorio
nodo
i
al
nodo
j
si
y slo si los rangos
de investigacin de IBM en Yorktown
de
vida
que
representan
los nodos
Heights, NY. Presentaron sus ideas en
interfieren;
esto
es,
estn
vivos
en el
los inicios de los ochentas.
mismo
momento
y
por
ende
no
pueden
Como se adelant, el algoritmo de
Chaitin consiste en asignar registros ocupar el mismo registro fsico. Los
11
(a)
(b)
(c)
(d)
El asignador de Yorktown
Ms formalmente, el asignador de
Yorktown (elaborado por Chaitin y
compaa, [4]) tiene varias fases, que
se pueden observar en la figura 3:
= Renumerar: encuentra todos los
rangos de vida en una rutina y les
asigna un nmero nico a cada uno.
= Construir: se construye el grafo de
interferencia.
2
= Fundir : el asignador remueve las
copias innecesarias, eliminando las
instrucciones de copia (estas instrucciones son las que tienen la forma x=y)
y combinando los rangos de vida del
fuente y del destino. Por ejemplo, supongamos que se tiene un rango de
vida de la variable x, luego el ltimo
uso de sta es una copia (y=x), de
manera que todas las apariciones de y
se pueden sustituir por x. Una copia
puede ser removida, si los rangos de
fuente y de destino no interfieren.
= Costo del spill: en la preparacin
para el coloreo, un costo de spill es
estimado para cada rango de vida.
= Simplificar: esta fase, junto con la
de seleccionar, ayuda a colorear el
grafo. La simplificacin examina repetidamente los nodos en el grafo G, removiendo aquellos nodos con grado
menor que k. Conforme cada nodo es
removido, sus arcos tambin se quitan
(decrementando el grado de sus vecinos) y es empujado en el tope de una
pila.
= Seleccionar: los colores son escogidos en el orden determinado por la
simplificacin. Por turnos, cada nodo
es sacado de la pila, reinsertado en el
grafo G, y se le da un color distinto al
de sus vecinos. El significado de la lnea punteada se discutir en la segunda
parte de esta entrega.
= Cdigo de spill: este cdigo es
insertado para cada rango de vida que
debe ser vctima de un spill.
Tiempo Compartido
vaciado de registros. Sin embargo, descuida algunos aspectos tcnicos que pueden ocasionar perjuicios en el rendimiento. Algunas mejoras sobre
este algoritmo sern analizadas en la segunda parte de este
artculo. De manera que, el
lector no debe perderse la
Figura 3: Pasos del asignador de Yorktown
siguiente ciruga al compilador: un paciente ciertamente
El corazn del asignador de (porque ste elimina la mayor cantidad de difcil de dar de alta.
Yorktown es el algoritmo de coloreo. enlaces). Sin embargo existen varias
La tcnica heurstica desarrollada por frmulas para determinar la vctima. Una
Chaitin para el coloreo de grafos, tiene de ellas, tambin propuesta por Chaitin, Referencias
una eficiencia de O(n+e), donde n es el es vaciar el nodo que tenga la menor
[1] Aho, Alfred et al. Compiladores:
principios, tcnicas y herramientas. Mxico:
nmero de rangos de vida a ser razn de costo de spill sobre grado:
Addison Weley Iberoamericana, 1985.
coloreados y e es el nmero de arcos en
Mn = Coston / Gradon
[2] Appel, Andrew W. Compiling with
el grafo de interferencia. Chaitin de- Donde el costo del nodo n se calcula de
continuations. New York, Estados Unidos:
mostr que su procedimiento puede ser acuerdo a ciertos parmetros de la
Cambridge University Press, 1992.
usado para lograr tanto un coloreo del mquina. Una vez que un nodo (que
[3] Barnette, David. Poly-hedra and the
grafo como un vaciado de registros de representa un rango de vida L) ha sido
fourcolor problem. Estados Unidos: AMS,
1983.
una manera integrada.
escogido para ser vaciado a memoria,
Ahora, cmo trabaja este algoritmo? se debe insertar una grabacin hacia
[4] Briggs, Preston. Register allocation via
Graph Coloring. Ph.D. Disertation, HousBien, la fase de simplificacin repetida- memoria despus de cada definicin de
ton, Texas: Rice University, 1992: Sitio: csmente remueve nodos del grafo y los L y una carga antes de cada uso de L.
tr.cs.cornell.edu.
empuja en una pila. En la seleccin, los La condicin de que un nodo deba tener
[5] Chaitin, Gregory J. Register allocation
nodos son sacados de la pila y menos de k vecinos para ser coloreado
and spilling via graph coloring. ACM:
devueltos al grafo. Un nodo es remo- es un muy restrictiva y eso ayuda a que
SIGPLAN82 Symposium on Compiler
Construction.Volmen17(6):98-105,jun. 1982
vido del grafo a la pila, slo si su grado el algoritmo encuentre menos frecuen[6] Fischer, Charles y Richard LeBlanc Jr.
es menor que k (donde k es el nmero temente una coloracin ptima. Por
Crafting a Compiler with C. Redwood City,
de registros de la mquina). As pues, ejemplo, el grafo de la figura 2 puede
CA, Estados Unidos: The Benjamin/Cummings
cuando la seleccin mueve un nodo N ser coloreado totalmente con 3 colores
Publishing Co., 1991.
desde la pila al grafo, N tendr as (asgnele a C el color negro), sin
[7] Faaty, Thomas L. y Paul C Kainen. The
menos de k vecinos y claramente habr necesidad de utilizar el vaciado de
four-color problem: assaults and conquest.
New York, Estados Unidos: Mc-Graw Hill
un color disponible para N en el grafo. registros. A la par de este problema
1977
La etapa de simplificacin slo existen muchos otros que tratarn de
[8] Fraser, Christopher y David Hanson. A
remueve un nodo cuando se puede pro- ser cicatrizados en la prxima operaretargetable C compiler: design and
bar que al nodo se le podr asignar un cin a los compiladores, que se har en
implementation. Estados Unidos: Benjacolor en el grafo actual. Conforme cada la segunda parte de este artculo.
min/Cummings Publishing Company, 1995.
rango de vida (o nodo) se remueve del
grafo, el grado de sus vecinos se decreConclusiones
T Esteban Meneses es estudiante avanmenta. As, se va probando, en turnos,
zado de la carrera de Ingeniera en
que es posible asignarles un color a La asignacin de registros es una de las
Computacin del I.T.C.R. Actualmencada uno de ellos. En la etapa de selec- optimizaciones ms importantes que
te realiza su prctica de especialidad en
cin a los nodos se les asigna un color pueden hacerse al cdigo generado por
ArtInSoft.
en orden inverso al cual fueron remo- un compilador. Es un problema NPvidos.
completo y por ello se han propuesto T Francisco Torres es bachiller en
Cabe destacar, que de aquellos nodos muchas alternativas heursticas para Informtica de la U.C.R., Mster en
que no se hayan podido remover del resolverlo de una manera eficiente. El Ciencias de la Computacin de Georgia
grafo a la pila, algunos necesitan ser algoritmo propuesto por Chaitin y su Tech y Doctor en Ciencias de la Comvaciados a memoria. Cmo escoger el equipo de investigacin fue una de las putacin del Georgia Tech. Actualmennodo a vaciar en memoria? Chaitin primeras tcnicas serias en este campo. te labora como profesor e investigador
propuso un mtodo muy sencillo: esco- Tiene la ventaja de ser muy sencillo y del Instituto Tecnolgico de Costa
ger el nodo que tenga ms vecinos de abstraer tambin el problema del Rica.
Abril 2001
13