Descargar

Introducción a la planificación de instrucciones (página 2)

Enviado por Pablo Turmero


Partes: 1, 2
edu.red 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

edu.red 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:) . .

edu.red 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

edu.red 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

edu.red 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

edu.red 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

edu.red 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

edu.red 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

edu.red 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

Partes: 1, 2
 Página anterior Volver al principio del trabajoPágina siguiente