Rotación de Registros y Software Pipelining (Organización del Computador II)

De Cuba-Wiki
Saltar a: navegación, buscar
Back.png Volver a la página de la materia

La cantidad de registros generales que rotan se definen en el 4to parametros del alloc. Los registros de punto flotante rotan todos a partir del f32, y los de predicado a partir del p16. La cantidad de registros generales que se rota debe ser múltiplo de 8.

Los registros generales que rotan son a partir del r32, siempre que se quiera salvar un valor para que se pueda acceder siempre con el mismo registro, se ubica en un reg lo suficientemente alto como para que no lo agarre la rotación, como ser r40 si se rotan 8.

Se rota el valor de r32 a r33, r33 a r34, etc. O sea, se mapea el r34 al r33, el r33 a r32, el e32 al r39, etc. La mayor dificultad del tema es qué registros elegir para rotar e identificarlos con qué valor en la función.

La instrucción para hacer el loop y rotar los registros una posición es br.ctop; chequear el manual por más instrucciones que actúan distinto cuando se anula el loop counter.

Contador de epílogo, ar.ec, indica qué se hace al final del loop; por ahora dejarlo en 1, en software pipelining se verá más en detalle.

Ejercicio[editar]

Siendo los 3 primeros valores 0 1 y 1, obtener el n-esimo valor de

F(n) = F(n-3) * F(n-1) + F(n-2)

Usando rotación de registros, se puede identificar esa cuenta con

r32 = (r35 * r33) + r34

El valor de F(n) se pasa a F(n-1) para la siguiente iteración, y así sucesivamente.

Codigo:

alloc r40 = ar.pfs, 1, 8, 0, 8	 //Rota 8 registros

mov r33 = 1	    //Inicializo
mov r34 = 1
mov r35 = 0

mov ar.ec = 1	    //Seteo epilogo

sub r32 = r32, 2   //Seteo loop counter considerando que tengo los valores de 0 a 2
mov ar.lc = r32

ciclo:
  
  pmpy2.r r32 = r35, r33    //Opero, el pmpy restringe a valores muy pequeños de n
  add r32 = r32, r34
  
  br.ctop.hints ciclo ;;    //Loopeo y roto
  
mov r8 = r33		     //El resultado queda en r33

  

Se podrian haber usado registros de float directamente, siendo que tambien rotan, para aprovechar la operacion de multiplicacion xmpy.

Para software pipelining, ir a la pagina principal de la materia.