Can HW get CPI closer to 1? • Why in HW/at run time? – Works when can’t know real dependence at compile time – Compiler simpler – Code for one machine runs well on another • Key idea #1: Allow instructions behind stall to proceed DIVD ADDD SUBD F0,F2,F4 F10,F0,F8 F12,F8,F14 Out-of-order execution out-of-order completion? • Key idea #2: Register Renaming DIVD ADDD SUBD MULD F0,F2,F4 F10,F0,F8 F0,F8,F14 F6,F10,F0 DIVD ADDD SUBD MULD F0,F2,F4 F10,F0,F8 F100,F8,F14 F6,F10,F100 Totally removes WAR and WAW hazards. 1 Moving beyond the five-stage pipeline: • Why limit performance for slow/less frequent ops? – Variable latencies/out-of-order execution desirable • How do we prevent WAR and WAW hazards? • How do we deal with variable latency? – Forwarding for RAW hazards harder. Clock Cycle Number Instruction LD F6,34(R2) LD F2,45(R3) MULTD F0,F2,F4 SUBD F8,F6,F2 DIVD F10,F0,F6 ADDD F6,F8,F2 2 1 2 3 4 5 6 7 8 9 10 11 IF ID EX MEM WB 12 13 14 15 16 17 RAW IF ID EX MEM WB IF ID stall M1 M2 M3 M4 M5 M6 M7 M8 M9 M10 MEM WB IF ID A1 A2 MEM WB IF ID stall stall stall stall stall stall stall stall stall D1 IF ID A1 A2 MEM WB WAR D2 Scoreboard: a bookkeeping technique • Out-of-order execution divides ID stage: 1. Issue—decode instructions, check for structural hazards 2. Read operands—wait until no data hazards, then read operands • Scoreboards date to CDC6600 in 1963 • Instructions execute whenever not dependent on previous instructions and no hazards. • CDC 6600: In order issue, out-of-order execution, out-of-order commit (or completion) – No forwarding! – Imprecise interrupt/exception model for now 3 Registers FP Mult FP Mult FP Divide FP Add Integer SCOREBOARD 4 Functional Units Scoreboard Architecture (CDC 6600) Memory Scoreboard Implications • Out-of-order completion => WAR, WAW hazards? • Solutions for WAR: – Stall writeback until registers have been read – Read registers only during Read Operands stage • Solution for WAW: – Detect hazard and stall issue of new instruction until other instruction completes • No register renaming! • Need to have multiple instructions in execution phase => multiple execution units or pipelined execution units • Scoreboard keeps track of dependencies between instructions that have already issued. • Scoreboard replaces ID, EX, WB with 4 stages 5 Four Stages of Scoreboard Control • Issue—decode instructions & check for structural hazards (ID1) – Instructions issued in program order (for hazard checking) – Don’t issue if structural hazard – Don’t issue if instruction is output dependent on any previously issued but uncompleted instruction (no WAW hazards) • Read operands—wait until no data hazards, then read operands (ID2) – All real dependencies (RAW hazards) resolved in this stage, since we wait for instructions to write back data. – No forwarding of data in this model! 6 Four Stages of Scoreboard Control • Execution—operate on operands (EX) – The functional unit begins execution upon receiving operands. When the result is ready, it notifies the scoreboard that it has completed execution. • Write result—finish execution (WB) – Stall until no WAR hazards with previous instructions: Example: DIVD ADDD SUBD F0,F2,F4 F10,F0,F8 F8,F8,F14 CDC 6600 scoreboard would stall SUBD until ADDD reads operands 7 Three Parts of the Scoreboard • Instruction status: Which of 4 steps the instruction is in • Functional unit status:—Indicates the state of the functional unit (FU). 9 fields for each functional unit Busy: Op: Fi: Fj,Fk: Qj,Qk: Rj,Rk: Indicates whether the unit is busy or not Operation to perform in the unit (e.g., + or –) Destination register Source-register numbers Functional units producing source registers Fj, Fk Flags indicating when Fj, Fk are ready • Register result status—Indicates which functional unit will write each register, if one exists. Blank when no pending instructions will write that register 8 Scoreboard Example Instruction status: Instruction LD F6 LD F2 MULTD F0 SUBD F8 DIVD F10 ADDD F6 j 34+ 45+ F2 F6 F0 F8 k R2 R3 F4 F2 F6 F2 Read Exec Write Issue Oper Comp Result Functional unit status: Time Name Integer Mult1 Mult2 Add Divide Busy 9 S1 Fj S2 Fk FU Qj FU Qk F2 F4 F6 F8 F10 F12 Fj? Rj Fk? Rk ... F30 No No No No No Register result status: Clock F0 FU Op dest Fi Detailed Scoreboard Pipeline Control Instruction status Issue Bookkeeping Busy(FU) yes; Op(FU) op; Fi(FU) `D’; Fj(FU) `S1’; Not busy (FU) Fk(FU) `S2’; Qj Result(‘S1’); and not result(D) Qk Result(`S2’); Rj not Qj; Rk not Qk; Result(‘D’) FU; Read operands Rj and Rk Execution complete Functional unit done Write result 10 Wait until Rj No; Rk No f((Fj(f)Fi(FU) f(if Qj(f)=FU then Rj(f) Yes); or Rj(f)=No) & f(if Qk(f)=FU then Rj(f) Yes); (Fk(f)Fi(FU) or Result(Fi(FU)) 0; Busy(FU) No Rk( f )=No)) Scoreboard Example: Cycle 1 Instruction status: Instruction LD F6 LD F2 MULTD F0 SUBD F8 DIVD F10 ADDD F6 j 34+ 45+ F2 F6 F0 F8 k R2 R3 F4 F2 F6 F2 Read Exec Write Issue Oper Comp Result 1 Functional unit status: Time Name Integer Mult1 Mult2 Add Divide Busy Op dest Fi Yes No No No No Load F6 F2 F4 Register result status: Clock F0 1 11 FU S1 Fj S2 Fk FU Qj FU Qk Fj? Rj R2 F6 Integer F8 F10 F12 Fk? Rk Yes ... F30 Scoreboard Example: Cycle 2 Instruction status: Instruction LD F6 LD F2 MULTD F0 SUBD F8 DIVD F10 ADDD F6 j 34+ 45+ F2 F6 F0 F8 k R2 R3 F4 F2 F6 F2 Read Exec Write Issue Oper Comp Result 1 2 Functional unit status: Time Name Integer Mult1 Mult2 Add Divide Busy Op dest Fi Yes No No No No Load F6 F2 F4 Register result status: Clock F0 2 FU • Issue 2nd LD? 12 S1 Fj S2 Fk FU Qj FU Qk Fj? Rj R2 F6 Integer F8 F10 F12 Fk? Rk Yes ... F30 Scoreboard Example: Cycle 3 Instruction status: Instruction LD F6 LD F2 MULTD F0 SUBD F8 DIVD F10 ADDD F6 j 34+ 45+ F2 F6 F0 F8 k R2 R3 F4 F2 F6 F2 Read Exec Write Issue Oper Comp Result 1 2 3 Busy Op dest Fi Yes No No No No Load F6 F2 F4 Functional unit status: Time Name Integer Mult1 Mult2 Add Divide Register result status: Clock F0 3 FU • Issue MULT? 13 S1 Fj S2 Fk FU Qj FU Qk Fj? Rj R2 F6 Integer F8 F10 F12 Fk? Rk No ... F30 Scoreboard Example: Cycle 4 Instruction status: Instruction LD F6 LD F2 MULTD F0 SUBD F8 DIVD F10 ADDD F6 j 34+ 45+ F2 F6 F0 F8 k R2 R3 F4 F2 F6 F2 Read Exec Write Issue Oper Comp Result 1 2 3 4 Op dest Fi S1 Fj S2 Fk F2 F4 F6 F8 F10 F12 Functional unit status: Time Name Integer Mult1 Mult2 Add Divide Busy 14 FU FU Qk Fj? Rj Fk? Rk ... F30 No No No No No Register result status: Clock F0 4 FU Qj Scoreboard Example: Cycle 5 Instruction status: Instruction LD F6 LD F2 MULTD F0 SUBD F8 DIVD F10 ADDD F6 j 34+ 45+ F2 F6 F0 F8 k R2 R3 F4 F2 F6 F2 Read Exec Write Issue Oper Comp Result 1 5 2 3 4 Busy Op dest Fi S1 Fj Yes No No No No Load F2 F2 F4 Functional unit status: Time Name Integer Mult1 Mult2 Add Divide Register result status: Clock F0 5 15 FU Integer S2 Fk FU Qj FU Qk Fj? Rj R3 F6 F8 F10 F12 Fk? Rk Yes ... F30 Scoreboard Example: Cycle 6 Instruction status: Instruction LD F6 LD F2 MULTD F0 SUBD F8 DIVD F10 ADDD F6 j 34+ 45+ F2 F6 F0 F8 k R2 R3 F4 F2 F6 F2 Read Exec Write Issue Oper Comp Result 1 5 6 2 6 Functional unit status: Time Name Integer Mult1 Mult2 Add Divide 16 4 S1 Fj S2 Fk R3 F4 Busy Op dest Fi Yes Yes No No No Load Mult F2 F0 F2 F2 F4 F6 Register result status: Clock F0 6 3 FU Mult1 Integer FU Qj FU Qk Fj? Rj Fk? Rk Integer No Yes Yes F8 F10 F12 ... F30 Scoreboard Example: Cycle 7 Instruction status: Instruction LD F6 LD F2 MULTD F0 SUBD F8 DIVD F10 ADDD F6 j 34+ 45+ F2 F6 F0 F8 k R2 R3 F4 F2 F6 F2 Read Exec Write Issue Oper Comp Result 1 5 6 7 2 6 3 7 4 Busy Op dest Fi S1 Fj S2 Fk Yes Yes No Yes No Load Mult F2 F0 F2 R3 F4 Sub F8 F6 F2 F2 F4 F6 Functional unit status: Time Name Integer Mult1 Mult2 Add Divide Register result status: Clock F0 7 FU Mult1 Integer • Read multiply operands? 17 FU Qj FU Qk Integer Integer F8 F10 F12 Add Fj? Rj Fk? Rk No No Yes Yes No ... F30 Scoreboard Example: Cycle 8a Instruction status: Instruction LD F6 LD F2 MULTD F0 SUBD F8 DIVD F10 ADDD F6 j 34+ 45+ F2 F6 F0 F8 (First half of clock cycle) k R2 R3 F4 F2 F6 F2 Read Exec Write Issue Oper Comp Result 1 5 6 7 8 2 6 3 7 4 Busy Op dest Fi S1 Fj S2 Fk Yes Yes No Yes Yes Load Mult F2 F0 F2 R3 F4 Sub Div F8 F10 F6 F0 F2 F6 F2 F4 F6 Functional unit status: Time Name Integer Mult1 Mult2 Add Divide Register result status: Clock F0 8 18 FU Mult1 Integer FU Qj FU Qk Fj? Rj Fk? Rk No No Yes Mult1 Yes No No Yes F8 F10 F12 ... F30 Integer Integer Add Divide Scoreboard Example: Cycle 8b (Second half of clock cycle) Instruction status: Instruction LD F6 LD F2 MULTD F0 SUBD F8 DIVD F10 ADDD F6 j 34+ 45+ F2 F6 F0 F8 k R2 R3 F4 F2 F6 F2 Read Exec Write Issue Oper Comp Result 1 5 6 7 8 2 6 3 7 4 8 Op dest Fi S1 Fj S2 Fk Mult F0 F2 Sub Div F8 F10 F6 F0 F2 F4 F6 Functional unit status: Time Name Integer Mult1 Mult2 Add Divide Busy No Yes No Yes Yes Register result status: Clock F0 8 19 FU Mult1 FU Qj Fj? Rj Fk? Rk F4 Yes Yes F2 F6 Mult1 Yes No Yes Yes F8 F10 F12 ... F30 Add Divide FU Qk Scoreboard Example: Cycle 9 Instruction status: Instruction LD F6 LD F2 MULTD F0 SUBD F8 DIVD F10 ADDD F6 j 34+ 45+ F2 F6 F0 F8 k R2 R3 F4 F2 F6 F2 Read Exec Write Issue Oper Comp Result 1 5 6 7 8 2 6 9 9 3 7 4 8 Op dest Fi S1 Fj S2 Fk Mult F0 F2 Sub Div F8 F10 F6 F0 F2 F4 F6 Functional unit status: Note Remaining Time Name Integer 10 Mult1 Mult2 2 Add Divide Busy No Yes No Yes Yes Register result status: Clock F0 9 FU Mult1 FU Qj FU Qk Fj? Rj Fk? Rk F4 Yes Yes F2 F6 Mult1 Yes No Yes Yes F8 F10 F12 ... F30 Add Divide • Read operands for MULT & SUB? Issue ADDD? 20 Scoreboard Example: Cycle 10 Instruction status: Instruction LD F6 LD F2 MULTD F0 SUBD F8 DIVD F10 ADDD F6 j 34+ 45+ F2 F6 F0 F8 k R2 R3 F4 F2 F6 F2 Read Exec Write Issue Oper Comp Result 1 5 6 7 8 2 6 9 9 3 7 4 8 Op dest Fi S1 Fj S2 Fk Mult F0 F2 Sub Div F8 F10 F6 F0 F2 F4 F6 Functional unit status: Time Name Integer 9 Mult1 Mult2 1 Add Divide Busy No Yes No Yes Yes Register result status: Clock F0 10 21 FU Mult1 FU Qj Fj? Rj Fk? Rk F4 No No F2 F6 Mult1 No No No Yes F8 F10 F12 ... F30 Add Divide FU Qk Scoreboard Example: Cycle 11 Instruction status: Instruction LD F6 LD F2 MULTD F0 SUBD F8 DIVD F10 ADDD F6 j 34+ 45+ F2 F6 F0 F8 k R2 R3 F4 F2 F6 F2 Read Exec Write Issue Oper Comp Result 1 5 6 7 8 2 6 9 9 11 Op dest Fi S1 Fj S2 Fk Mult F0 F2 Sub Div F8 F10 F6 F0 F2 F4 F6 Functional unit status: Time Name Integer 8 Mult1 Mult2 0 Add Divide Busy No Yes No Yes Yes Register result status: Clock F0 11 22 FU Mult1 3 7 4 8 FU Qj Fj? Rj Fk? Rk F4 No No F2 F6 Mult1 No No No Yes F8 F10 F12 ... F30 Add Divide FU Qk Scoreboard Example: Cycle 12 Instruction status: Instruction LD F6 LD F2 MULTD F0 SUBD F8 DIVD F10 ADDD F6 j 34+ 45+ F2 F6 F0 F8 k R2 R3 F4 F2 F6 F2 Read Exec Write Issue Oper Comp Result 1 5 6 7 8 2 6 9 9 3 7 4 8 11 12 Op dest Fi S1 Fj S2 Fk Mult F0 F2 F4 Div F10 F0 F6 F2 F4 F6 Functional unit status: Time Name Integer 7 Mult1 Mult2 Add Divide Busy No Yes No No Yes Register result status: Clock F0 12 FU Mult1 • Read operands for DIVD? 23 FU Qj Fj? Rj Fk? Rk No No Mult1 No Yes F8 F10 F12 ... F30 Divide FU Qk Scoreboard Example: Cycle 13 Instruction status: Instruction LD F6 LD F2 MULTD F0 SUBD F8 DIVD F10 ADDD F6 j 34+ 45+ F2 F6 F0 F8 k R2 R3 F4 F2 F6 F2 Read Exec Write Issue Oper Comp Result 1 5 6 7 8 13 2 6 9 9 3 7 4 8 11 12 Op dest Fi S1 Fj S2 Fk Mult F0 F2 Add Div F6 F10 F8 F0 F2 F4 Functional unit status: Time Name Integer 6 Mult1 Mult2 Add Divide Busy No Yes No Yes Yes Register result status: Clock F0 13 24 FU Mult1 FU Qj FU Qk Fj? Rj Fk? Rk F4 No No F2 F6 Mult1 Yes No Yes Yes F6 F8 F10 F12 ... F30 Add Divide Scoreboard Example: Cycle 14 Instruction status: Instruction LD F6 LD F2 MULTD F0 SUBD F8 DIVD F10 ADDD F6 j 34+ 45+ F2 F6 F0 F8 k R2 R3 F4 F2 F6 F2 Read Exec Write Issue Oper Comp Result 1 5 6 7 8 13 2 6 9 9 3 7 4 8 11 12 Op dest Fi S1 Fj S2 Fk Mult F0 F2 Add Div F6 F10 F8 F0 F2 F4 14 Functional unit status: Time Name Integer 5 Mult1 Mult2 2 Add Divide Busy No Yes No Yes Yes Register result status: Clock F0 14 25 FU Mult1 FU Qj FU Qk Fj? Rj Fk? Rk F4 No No F2 F6 Mult1 Yes No Yes Yes F6 F8 F10 F12 ... F30 Add Divide Scoreboard Example: Cycle 15 Instruction status: Instruction LD F6 LD F2 MULTD F0 SUBD F8 DIVD F10 ADDD F6 j 34+ 45+ F2 F6 F0 F8 k R2 R3 F4 F2 F6 F2 Read Exec Write Issue Oper Comp Result 1 5 6 7 8 13 2 6 9 9 3 7 4 8 11 12 Op dest Fi S1 Fj S2 Fk Mult F0 F2 Add Div F6 F10 F8 F0 F2 F4 14 Functional unit status: Time Name Integer 4 Mult1 Mult2 1 Add Divide Busy No Yes No Yes Yes Register result status: Clock F0 15 26 FU Mult1 FU Qj FU Qk Fj? Rj Fk? Rk F4 No No F2 F6 Mult1 No No No Yes F6 F8 F10 F12 ... F30 Add Divide Scoreboard Example: Cycle 16 Instruction status: Instruction LD F6 LD F2 MULTD F0 SUBD F8 DIVD F10 ADDD F6 j 34+ 45+ F2 F6 F0 F8 k R2 R3 F4 F2 F6 F2 Read Exec Write Issue Oper Comp Result 1 5 6 7 8 13 2 6 9 9 3 7 4 8 11 12 14 16 Op dest Fi S1 Fj S2 Fk Mult F0 F2 Add Div F6 F10 F8 F0 F2 F4 Functional unit status: Time Name Integer 3 Mult1 Mult2 0 Add Divide Busy No Yes No Yes Yes Register result status: Clock F0 16 27 FU Mult1 FU Qj FU Qk Fj? Rj Fk? Rk F4 No No F2 F6 Mult1 No No No Yes F6 F8 F10 F12 ... F30 Add Divide Scoreboard Example: Cycle 17 Instruction status: Instruction LD F6 LD F2 MULTD F0 SUBD F8 DIVD F10 ADDD F6 j 34+ 45+ F2 F6 F0 F8 k R2 R3 F4 F2 F6 F2 Read Exec Write Issue Oper Comp Result 1 5 6 7 8 13 2 6 9 9 3 7 4 8 11 12 14 16 Op dest Fi S1 Fj S2 Fk Mult F0 F2 Add Div F6 F10 F8 F0 F2 F4 Functional unit status: Time Name Integer 2 Mult1 Mult2 Add Divide Busy No Yes No Yes Yes Register result status: Clock F0 17 FU Mult1 WAR Hazard! Fj? Rj Fk? Rk F4 No No F2 F6 Mult1 No No No Yes F6 F8 F10 F12 ... F30 Add Divide • Why not write result of ADD??? 28 FU Qj FU Qk Scoreboard Example: Cycle 18 Instruction status: Instruction LD F6 LD F2 MULTD F0 SUBD F8 DIVD F10 ADDD F6 j 34+ 45+ F2 F6 F0 F8 k R2 R3 F4 F2 F6 F2 Read Exec Write Issue Oper Comp Result 1 5 6 7 8 13 2 6 9 9 3 7 4 8 11 12 14 16 Op dest Fi S1 Fj S2 Fk Mult F0 F2 Add Div F6 F10 F8 F0 F2 F4 Functional unit status: Time Name Integer 1 Mult1 Mult2 Add Divide Busy No Yes No Yes Yes Register result status: Clock F0 18 29 FU Mult1 FU Qj FU Qk Fj? Rj Fk? Rk F4 No No F2 F6 Mult1 No No No Yes F6 F8 F10 F12 ... F30 Add Divide Scoreboard Example: Cycle 19 Instruction status: Instruction LD F6 LD F2 MULTD F0 SUBD F8 DIVD F10 ADDD F6 j 34+ 45+ F2 F6 F0 F8 k R2 R3 F4 F2 F6 F2 Read Exec Write Issue Oper Comp Result 1 5 6 7 8 13 2 6 9 9 3 7 19 11 14 16 Op dest Fi S1 Fj S2 Fk Mult F0 F2 Add Div F6 F10 F8 F0 F2 F4 Functional unit status: Time Name Integer 0 Mult1 Mult2 Add Divide Busy No Yes No Yes Yes Register result status: Clock F0 19 30 FU Mult1 4 8 12 FU Qj FU Qk Fj? Rj Fk? Rk F4 No No F2 F6 Mult1 No No No Yes F6 F8 F10 F12 ... F30 Add Divide Scoreboard Example: Cycle 20 Instruction status: Instruction LD F6 LD F2 MULTD F0 SUBD F8 DIVD F10 ADDD F6 j 34+ 45+ F2 F6 F0 F8 k R2 R3 F4 F2 F6 F2 Read Exec Write Issue Oper Comp Result 1 5 6 7 8 13 2 6 9 9 3 7 19 11 14 16 Busy Op dest Fi S1 Fj S2 Fk No No No Yes Yes Add Div F6 F10 F8 F0 F2 F6 Register result status: Clock F0 F2 F4 F6 F8 F10 F12 Add Divide Functional unit status: Time Name Integer Mult1 Mult2 Add Divide 20 31 FU 4 8 20 12 FU Qj FU Qk Fj? Rj Fk? Rk No Yes No Yes ... F30 Scoreboard Example: Cycle 21 Instruction status: Instruction LD F6 LD F2 MULTD F0 SUBD F8 DIVD F10 ADDD F6 j 34+ 45+ F2 F6 F0 F8 k R2 R3 F4 F2 F6 F2 Read Exec Write Issue Oper Comp Result 1 5 6 7 8 13 2 6 9 9 21 14 Functional unit status: 3 7 19 11 16 Busy Op dest Fi No No No Yes Yes Add Div F6 F10 F8 F0 Register result status: Clock F0 F2 F4 F6 F8 F10 F12 Add Divide Time Name Integer Mult1 Mult2 Add Divide 21 FU • WAR Hazard is now gone... 32 4 8 20 12 S1 Fj S2 Fk F2 F6 FU Qj FU Qk Fj? Rj Fk? Rk No Yes No Yes ... F30 Scoreboard Example: Cycle 22 Instruction status: Instruction LD F6 LD F2 MULTD F0 SUBD F8 DIVD F10 ADDD F6 j 34+ 45+ F2 F6 F0 F8 Read Exec Write k Issue Oper Comp Result R2 R3 F4 F2 F6 F2 1 5 6 7 8 13 2 6 9 9 21 14 Functional unit status: 4 8 20 12 16 22 S1 Fj S2 Fk F6 Busy Op dest Fi No No No No Yes Div F10 F0 Register result status: Clock F0 F2 F4 F6 Time Name Integer Mult1 Mult2 Add 39 Divide 22 33 3 7 19 11 FU FU Qj FU Qk F8 F10 F12 Divide Fj? Rj Fk? Rk No No ... F30 Faster than light computation (skip a couple of cycles) 34 Scoreboard Example: Cycle 61 Instruction status: Instruction LD F6 LD F2 MULTD F0 SUBD F8 DIVD F10 ADDD F6 j 34+ 45+ F2 F6 F0 F8 k R2 R3 F4 F2 F6 F2 Read Exec Write Issue Oper Comp Result 1 5 6 7 8 13 2 6 9 9 21 14 3 7 19 11 61 16 4 8 20 12 Busy Op dest Fi S1 Fj S2 Fk No No No No Yes Div F10 F0 F6 Register result status: Clock F0 F2 F4 F6 Functional unit status: Time Name Integer Mult1 Mult2 Add 0 Divide 61 35 FU 22 FU Qj FU Qk F8 F10 F12 Divide Fj? Rj Fk? Rk No No ... F30 Scoreboard Example: Cycle 62 Instruction status: Instruction LD F6 LD F2 MULTD F0 SUBD F8 DIVD F10 ADDD F6 j 34+ 45+ F2 F6 F0 F8 k R2 R3 F4 F2 F6 F2 Read Exec Write Issue Oper Comp Result 1 5 6 7 8 13 2 6 9 9 21 14 3 7 19 11 61 16 4 8 20 12 62 22 Op dest Fi S1 Fj S2 Fk F2 F4 F6 F8 F10 F12 Functional unit status: Time Name Integer Mult1 Mult2 Add Divide Busy 36 FU FU Qk Fj? Rj Fk? Rk ... F30 No No No No No Register result status: Clock F0 62 FU Qj Review: Scoreboard Example: Cycle 62 Instruction status: Instruction LD F6 LD F2 MULTD F0 SUBD F8 DIVD F10 ADDD F6 j 34+ 45+ F2 F6 F0 F8 k R2 R3 F4 F2 F6 F2 Read Exec Write Issue Oper Comp Result 1 5 6 7 8 13 2 6 9 9 21 14 3 7 19 11 61 16 4 8 20 12 62 22 Op dest Fi S1 Fj S2 Fk F2 F4 F6 F8 F10 F12 Functional unit status: Time Name Integer Mult1 Mult2 Add Divide Busy FU Qk Fj? Rj Fk? Rk ... F30 No No No No No Register result status: Clock F0 62 FU Qj FU • In-order issue; out-of-order execute & commit 37 CDC 6600 Scoreboard • Historical context: – Speedup 1.7 from compiler; 2.5 by hand BUT slow memory (no cache) limits benefit • Limitations of 6600 scoreboard: – – – – No forwarding hardware Limited to instructions in basic block (small window) No register renaming! Small number of functional units (structural hazards), especially integer/load store units – Do not issue on structural hazards – Wait for WAR hazards – Prevent WAW hazards • Precise interrupts???? 38
© Copyright 2026 Paperzz