Instruction status—indica en cual de las etapas está la instrucción
Functional unit status—Indica el estado de la unidad funcional (FU). 9 campos para cada unidad funcional
Busy—Indica si la unidad está ocupada o no
Op—Operación a realizar en la unidad (e.g., + or –)
Fi—Registro de destino
Fj, Fk—Número de los registros fuente
Qj, Qk—Unidades funcionales que producen los
registros fuente Fj, Fk
Rj, Rk—Flags indicando cuando están disponibles Fj, Fk
Register result status—Indica que unidad funcional escribirá en cada registro, si es que existe. En blanco cuando no hay instrucciones pendientes que vayan a escribir en el registro
11
ESTRUCTURA DE DATOS DE SCOREBOARD
ESTRUCTURA DE DATOS BÁSICA DEL MARCADOR
12
(Gp:) Reg
(Gp:) ….
(Gp:) r1
(Gp:) r2
(Gp:) r4
(Gp:) r3
(Gp:) rm
(Gp:) Busy
(Gp:) Op
(Gp:) Ufunc 1
(Gp:) Fi
(Gp:) Fj
(Gp:) Fk
(Gp:) Qj
(Gp:) Rj
(Gp:) Qk
(Gp:) Rk
(Gp:) Ufunc 2
(Gp:) Ufunc n
(Gp:) Ufunc 3
(Gp:) .
.
(Gp:) .
.
(Gp:) Instr 1
Instr 2
Instr 3
Instr n
(Gp:) Ro
(Gp:) Wb
(Gp:) Ex
(Gp:) .
.
Etapa IS
While inst no emitida and inst previa emitida do
if R[dest] = 0 and (UF[f] capaz ejecutar Op and UF[f,Busy]=0) // f = tipo de unidad funcional
then
R[dest] := f;
UF[f,Busy] := 1;
Inst[j,RO] := Inst[j,Ex] := Inst[j,Wb] := 0;
UF[f,Op] := Op; UF[f,Fi] := dest; UF[f,Fj] := src1;
if R[src1]=0 then UF[f,Rj]:=1; // válido
else UF[f,Rj]:=0;
UF[f,Qj]:=R[src1]; UF[f,Fk] := src2;
if R[src2]=0 then UF[f,Rk]:=1; // válido
else UF[f,Rk]:=0;
UF[f,Qk]:=R[src2];
enddo
13
ACTUALIZACIÓN DE LOS DATOS EN EL MARCADOR: EJEMPLO
14
(Gp:) Read operands
(Gp:) Execution complete
(Gp:) Instruction status
(Gp:) Write result
(Gp:) Issue
(Gp:) Bookkeeping
(Gp:) Rj ? No; Rk ? No
(Gp:) ?f(if Qj(f)=FU then Rj(f) ? Yes); ?f(if Qk(f)=FU then Rj(f) ? Yes); Result(Fi(FU)) ? 0; Busy(FU) ? No
(Gp:) Busy(FU) ? yes; Op(FU) ? op; Fi(FU) ? `D’; Fj(FU) ? `S1’; Fk(FU) ? `S2’; Qj ? Result(‘S1’); Qk ? Result(`S2’); Rj ? not Qj; Rk ? not Qk; Result(‘D’) ? FU;
(Gp:) Rj and Rk
(Gp:) Functional unit done
(Gp:) Wait until
(Gp:) ?f((Fj( f )?Fi(FU) or Rj( f )=No) & (Fk( f ) ?Fi(FU) or Rk( f )=No))
(Gp:) Not busy (FU) and not result(D)
CONTROL DEL CAUCE CON SCOREBOARD
CAUCE DLX CON SCOREBOARD
15
IS
(Gp:) Scoreboard
(Gp:) IF
(Gp:) FP Mult
(Gp:) FP Add
(Gp:) Integer ALU
(Gp:) FP Div
(Gp:) MEM
(Gp:) Wb
(Gp:) RO
(Gp:) Exint
(Gp:) ExFU1
(Gp:) ExFU2
(Gp:) ExFU3
IS
Limitaciones del scoreboard:
No hay hardware para forwarding.
Limitado a instrucciones en bloques básicos (ventanas pequeñas).
Pequeño número de unidades funcionales (riesgos estructurales), especialmente unidades enteras/load store.
No se emite en caso de riesgo estructural.
Se espera por los riesgos WAR. Previene los riesgos WAW.
No permite que dos instrucciones terminen el mismo ciclo.
No permite manejar unidades funcionales segmentadas.
Mejoras
Una mejora fácil de introducir es permitir que el algoritmo pueda manejar unidades funcionales segmentadas.
16
SCOREBOARD: LIMITACIONES
Para eliminar la limitaciones del scoreboard básico en el manejo de las unidades segmentadas recordemos que:
En scoreboard básico, la UF se libera cuando el resultado generado en la UF entra en la etapa WB (en el primer semiciclo de reloj).
Esto implica que en una instrucción larga la UF está asignada durante muchos ciclos.
Solución
Liberar la UF cuando el resultado de la primera etapa segmentada de la unidad funcional entra en el segundo segmento o si no está segmentada la UF cuando pase al WB.
En la arquitectura DLX propuesta el cauce aritmético entero está segmentado en dos etapas la EX y la MEM, mientras que las demás UF requieren varios ciclos pero no están segmentadas.
Veamos el efecto en el ejemplo anterior (sobre el cronograma).
17
SCOREBOARD CON UF SEGMENTADAS
18
La ganacia se limita a un ciclo ya que la única UF segmentada es la entera y sólo
hay dos instrucciónes load.
DLX CON MARCADOR PARA UF SEGMENTADAS: EJEMPLO CRONOGRAMA
Paralelismo a nivel de instrucción (ILP) en SW o HW.
Paralelismo a nivel de bucle es más fácil de ver.
Dependencias del paralelismo SW definidas por programa, riesgos si no pueden ser resueltas por el HD.
Las dependencias software y la sofisticación del compilador determinan si el compilador puede desenrollar los bucles.
Las dependencias de memoria son más difíciles de determinar.
HW explotando el ILP.
Funciona cuando no es posible determinar las dependencias en run time.
El código para una máquina funciona bien en otra.
Idea clave del Scoreboard: permite proseguir a instrucciones posteriores a una detenida (Decode => Issue instr & read operands).
Permite la ejecución out-of-order => finalización out-of-order.
Etapa ID verifica los riesgos estructurales.
19
SUMARIO
Página anterior | Volver al principio del trabajo | Página siguiente |