Você está na página 1de 34

Compiladores

La palabra clave registro es un especificador de tipo de almacenamiento; se utiliza para indicar al compilador que ciertas variables deben ser almacenadas en los registros del procesador en lugar de la pila. Son las denominadas variables de registro. La razn de este "capricho" hay que buscarla en la velocidad. Ocurre que los registros, aunque de poca capacidad y en nmero limitado, corresponden a zonas de almacenamiento de los procesadores cuyo acceso es excepcionalmente rpido
3

o sea, no se conoce un algoritmo que en tiempo polinomial pueda resolver el problema de forma ptima.

Ejemplo.
En las maquinas IBM Sistema/370 la multiplicacin y la divisin de enteros incluyen parejas de registros. La instruccin de multiplicacin es de la forma
M X, Y

Donde x, el multiplicando, es el registro par de una pareja de registros par-impar. El valor del multiplicando se toma del registro impar de la pareja. El multiplicador y es un solo registro. El producto ocupa toda la pareja del registro.

Ejemplo.
La instruccin de divisin es de la forma D X, Y

Donde el dividendo de 64 bits ocupa una pareja de registros par e impar cuyo registro par es X; Y representa el divisor. Despus de la divisin, el registro par contiene el resto y el registro impar el cociente.

Ejemplo.
Considere ahora las secuencias de cdigo de tres direcciones de
t:= a + b t:= t * c t:= t / d L A M D ST R1, a R1, b R0, c R0, d R1, t

Dos secuencias de cdigo de tres direcciones con las Secuencia optima de cdigo de maquina
10

Caractersticas.
Ri representa al registro i. (SDRA R0, 32 desplaza el dividendo dentro de R1 y elimina R0 de modo que todos los bits son iguales al bit de signo.) Obsrvese que la opcin optima para el registro en el que debe cargarse a depende de lo que finalmente le ocurra a t.

t:= t / d t:= t + c t:= a + b

L A A SRDA D ST

R0, a R0, b R0, c R0, 32 R0, d R1, t

Dos secuencias de cdigo de tres direcciones con las Secuencia optima de cdigo de maquina

11

12

Representacin esquemtica.
Las instrucciones que implican solo operandos n registros son mas cortas y rpidas que las de operando en memoria.
Por tanto, es importante utilizar eficientemente los registros para generar un buen cdigo.
13

.
Un aspecto de la distribucin y asignacin de registros es asignar valores especficos en un programa objeto a algunos registros. Por ejemplo, se puede tomar la decisin de asignar las direcciones base a un grupo de registros, los clculos aritmticos a otro, el tope de la pila en ejecucin a un registro fijo, y as sucesivamente.

14

Inconvenientes.
Si se aplica con demasiada rigidez no utiliza eficientemente los registros(algunos registros pueden quedar sin utilizar durante partes substanciales de cdigo, mientras que se generan cargas ) almacenamientos innecesarios.
15

16

se puede decidir asignar los registros a las variables utilizadas con frecuencia y mantener consistentes estos registros a travs de los lmites de los bloques (globalmente) Como los programas pasan la mayor parte de su tiempo en lazos internos, un enfoque natural de la distribucin global de registros es intentar conservar un valor utilizado con frecuencia en un registro fijo durante todo un lazo
17

Por el momento, supngase que se conoce la estructura de lazo de un grafo de flujo y los valores calculndolos en un bloque bsico que se utiliza fuera de ese bloque. Una estrategia para la distribucin global de registros es asignar un nmero fijo de registros para guardar los valores ms activos de cada lazo interno. Los valores seleccionados pueden ser distintos en lazos distintos. Se pueden utilizar los registros que todava no se hayan asignado para conservar los valores locales a un bloque
18

Este enfoque tiene el defecto de que el nmero fijo de registros no siempre es el correcto de registros disponibles para la asignacin global de registros Sin embargo, el mtodo es sencillo de implantar y se ha usado en FORTRAN H, el compilador optimador de FORTRAN para las maquinas de la seria IBM-360 (Lowry y Medlock [1969]).
19

En lenguajes como C y BLISS, un programador puede realizar una asignacin de registros directamente utilizando declaraciones de registros para conservar algunos valores dentro de los registros para la duracin de un procedimiento. Un uso inteligente de las declaraciones de registros puede acelerar muchos programas, pero un programador no debe realizar la asignacin de los registros sin perfilar primero su programa.

20

21

Definicin.
Es un mtodo sencillo para determinar los ahorros obtenidos al conservar la variable X en un registro durante el tiempo de lazo L. ( , + 2 (, ))
Bloques B en L

Donde
, = (, ) =es 1 si x esta activo a la salida de B y se le asigna un valor en B y en caso contario 0 22

Ejemplo.
Considrese bloques bsicos. Supngase que se asignan los registros R0,R1 y R2, para guardar valor a travs del lazo
bcdf a := b + c d:= d b e:= a + f acde f:= a d B2 cdef b:= d + c bcdef b,c,d,e,f activas B4 acdef

B1
acdf b:= d + f e:= a - c bcdef B3

cdef

b,d,e,f activas

23

Secuencia de cdigo que usa asignacin a registros globales.

24

25

Definicin.
Cuando se necesita un registro para un calculo pero todos los registros disponibles estn siendo utilizados se debe almacenar el contenido de uno de los registros utilizados en una posicin de memoria para dejar libre el registro La coloracin de grafos es una tcnica sistemtica y sencilla para asignar registros t administrar el vaciado de los registros

26

Definicin.
Algoritmo

Asignar colores a los nodos de forma que ningn par de nodos unidos por aristas tengan el mismo color
N colores = N de registros

27

Primera pasada .

La forma usual de resolver este problema empieza con un anlisis de flujo

28

Primera pasada .
Por ejemplo, dado el siguiente cdigo que empieza con las variables k y j, y termina con las variables d, k y j:
1. k, j 2. g = mem[ j + 12 ] 3. h = k -1 4. f = g * h 5. e = mem[ j + 8 ] 6. m = mem[ j + 16 ] 7. b = mem[ f ] 8. c = e + 8 9. d = c 10.k = m * 4 11.j = b 12.d, k, j

29

Segunda pasada.
Se crea un grafo de interferencia de registros con: nodos = variables arista = una arista entre nodos si ambas variables estn activas simultneamente

30

Coloracin de grafos.
En esta figura utilizamos 4 colores = 4 registros

En la esta figura utilizamos 3 colores = 3 registros optimizando el uso de los registros


31

Coloracin de grafos.
Esta es las nueva matriz de inferencia con el uso optimizado de los registros

32

/C=
33

Cmara Cupul Rigel Adiel Poot Dzul Rubi Esmeralda.

34

Você também pode gostar