computer architecture: a constructive approach six stage pipeline/bypassing joel emer
DESCRIPTION
Computer Architecture: A Constructive Approach Six Stage Pipeline/Bypassing Joel Emer Computer Science & Artificial Intelligence Lab. Massachusetts Institute of Technology. Three-Cycle SMIPS: Analysis. Decode/ RegRead / Execute/Memory. Fetch. Writeback. pc. wr. - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Computer Architecture: A Constructive Approach Six Stage Pipeline/Bypassing Joel Emer](https://reader035.vdocuments.site/reader035/viewer/2022081503/568163e4550346895dd54414/html5/thumbnails/1.jpg)
Computer Architecture: A Constructive Approach
Six Stage Pipeline/Bypassing
Joel EmerComputer Science & Artificial Intelligence Lab.Massachusetts Institute of Technology
March 14, 2012http://csg.csail.mit.edu/
6.S078 L11-1
![Page 2: Computer Architecture: A Constructive Approach Six Stage Pipeline/Bypassing Joel Emer](https://reader035.vdocuments.site/reader035/viewer/2022081503/568163e4550346895dd54414/html5/thumbnails/2.jpg)
Three-Cycle SMIPS: Analysis
Fetch Decode/RegRead/Execute/Memory
Decode/RegRead/Execute/Memory
Fetch
Does Fetch or DRXM depend on Writeback?
March 14, 2012http://csg.csail.mit.edu/
6.S078
Yes, for register values
pc
ir Writebackmr
Writeback
wr
L11-2
![Page 3: Computer Architecture: A Constructive Approach Six Stage Pipeline/Bypassing Joel Emer](https://reader035.vdocuments.site/reader035/viewer/2022081503/568163e4550346895dd54414/html5/thumbnails/3.jpg)
Stall calculation
March 14, 2012http://csg.csail.mit.edu/
6.S078
Stall calculation
WB Stall Reg
WB Feedback
wbStall
L11-3
![Page 4: Computer Architecture: A Constructive Approach Six Stage Pipeline/Bypassing Joel Emer](https://reader035.vdocuments.site/reader035/viewer/2022081503/568163e4550346895dd54414/html5/thumbnails/4.jpg)
Data dependence waterfall
March 14, 2012http://csg.csail.mit.edu/
6.S078
From whiteboard
L11-4
![Page 5: Computer Architecture: A Constructive Approach Six Stage Pipeline/Bypassing Joel Emer](https://reader035.vdocuments.site/reader035/viewer/2022081503/568163e4550346895dd54414/html5/thumbnails/5.jpg)
Types of Data Hazards
March 14, 2012http://csg.csail.mit.edu/
6.S078
Data-dependencer3 (r1) op (r2) Read-after-Write r5 (r3) op (r4) (RAW) hazard
Consider executing a sequence of instructions like:rk (ri) op (rj)
Anti-dependencer3 (r1) op (r2) Write-after-Read r1 (r4) op (r5) (WAR) hazard
Output-dependencer3 (r1) op (r2) Write-after-Write r3 (r6) op (r7) (WAW) hazard
L11-5
![Page 6: Computer Architecture: A Constructive Approach Six Stage Pipeline/Bypassing Joel Emer](https://reader035.vdocuments.site/reader035/viewer/2022081503/568163e4550346895dd54414/html5/thumbnails/6.jpg)
March 14, 2012http://csg.csail.mit.edu/
6.S078
Detecting Data HazardsRange and Domain of instruction i
R(i) = Registers (or other storage) modified by instruction i
D(i) = Registers (or other storage) read by instruction i
Suppose instruction j follows instruction i in the program order. Executing instruction j before the effect of instruction i has taken place can cause a
RAW hazard if R(i) D(j) WAR hazard if D(i) R(j) WAW hazard if R(i) R(j)
L11-6
![Page 7: Computer Architecture: A Constructive Approach Six Stage Pipeline/Bypassing Joel Emer](https://reader035.vdocuments.site/reader035/viewer/2022081503/568163e4550346895dd54414/html5/thumbnails/7.jpg)
March 14, 2012http://csg.csail.mit.edu/
6.S078
Register vs. MemoryData Dependence
Data hazards due to register operands can be determined at the decode stage but
Data hazards due to memory operands can be determined only after computing the effective address
store M[(r1) + disp1] (r2) load r3 M[(r4) + disp2]
Does (r1 + disp1) = (r4 + disp2) ?
L11-7
![Page 8: Computer Architecture: A Constructive Approach Six Stage Pipeline/Bypassing Joel Emer](https://reader035.vdocuments.site/reader035/viewer/2022081503/568163e4550346895dd54414/html5/thumbnails/8.jpg)
March 14, 2012http://csg.csail.mit.edu/
6.S078
Data Hazards: An ExampleI1 DIVD f6, f6, f4
I2 LD f2, 45(r3)
I3 MULTD f0, f2, f4
I4 DIVD f8, f6, f2
I5 SUBD f10, f0, f6
I6 ADDD f6, f8, f2RAW HazardsWAR HazardsWAW Hazards
L11-8
![Page 9: Computer Architecture: A Constructive Approach Six Stage Pipeline/Bypassing Joel Emer](https://reader035.vdocuments.site/reader035/viewer/2022081503/568163e4550346895dd54414/html5/thumbnails/9.jpg)
Scoreboard
Add a scoreboard of registers in use: Set bit for each register to be updated Clear bit when a register is updated Stall if bit for a register needed is set
March 14, 2012http://csg.csail.mit.edu/
6.S078
R31 • • • • • R0
Register#(Bit#(32)) scoreboard <- mkReg(0);
L11-9
![Page 10: Computer Architecture: A Constructive Approach Six Stage Pipeline/Bypassing Joel Emer](https://reader035.vdocuments.site/reader035/viewer/2022081503/568163e4550346895dd54414/html5/thumbnails/10.jpg)
SMIPs Pipeline AnalysisStage Tclock >
Six stageFetch tM
Decode tDEC
Register Read tRF
Execute tALU
Memory tM
Writeback tWB
March 14, 2012http://csg.csail.mit.edu/
6.S078 L11-10
![Page 11: Computer Architecture: A Constructive Approach Six Stage Pipeline/Bypassing Joel Emer](https://reader035.vdocuments.site/reader035/viewer/2022081503/568163e4550346895dd54414/html5/thumbnails/11.jpg)
Six Stage Pipeline
March 14, 2012http://csg.csail.mit.edu/
6.S078
F
Fetch
fr D
Decode
dr R
RegRead
rr X
Execute
xr M
Memory
mr W
Write-back
pc
wb
Where do we need feedback?X to F and W to R
L11-11
![Page 12: Computer Architecture: A Constructive Approach Six Stage Pipeline/Bypassing Joel Emer](https://reader035.vdocuments.site/reader035/viewer/2022081503/568163e4550346895dd54414/html5/thumbnails/12.jpg)
Six-Stage Statemodule mkProc(Proc); Reg#(Addr) fetchPc <- mkRegU; RFile rf <- mkRFile; Memory mem <- mkMemory;
FIFO#(FBundle) fr <- mkFIFO; FIFO#(DecBundle) dr <- mkFIFO; FIFO#(RegBundle) rr <- mkFIFO; FIFO#(EBundle) xr <- mkFIFO; FIFO#(WBundle) mr <- mkFIFO;
FIFOF#(Addr) nextPc <- mkFIFOF; FIFOF#(Rindx) wbRind <- mkFIFOF;
// and internal control state…
March 14, 2012http://csg.csail.mit.edu/
6.S078 L11-12
![Page 13: Computer Architecture: A Constructive Approach Six Stage Pipeline/Bypassing Joel Emer](https://reader035.vdocuments.site/reader035/viewer/2022081503/568163e4550346895dd54414/html5/thumbnails/13.jpg)
Six-Stage Fetchrule doFetch; Addr pc = ?; Bool epoch = fetchEpoch;
if (nextPc.notEmpty) begin pc = nextPc.first; epoch = !fetchEpoch; nextPc.deq; end else pc = fetchPc + 4;
fetchPc <= pc; fetchEpoch <= epoch;
let instResp <- mem.op(MemReq{op:Ld, addr:pc, data:?});
fr.enq(FBundle{pc:pc,epoch:epoch,InstResp:instResp});
endrule
March 14, 2012http://csg.csail.mit.edu/
6.S078 L11-13
![Page 14: Computer Architecture: A Constructive Approach Six Stage Pipeline/Bypassing Joel Emer](https://reader035.vdocuments.site/reader035/viewer/2022081503/568163e4550346895dd54414/html5/thumbnails/14.jpg)
Six-Stage Decoderule doDecode; let fetchInst = fr.first; let pcPlus4 = fetchInst.predpc + 4;
let decInst = decode(fetchInst.instResp, pcPlus4);
decInst.epoch = fetchInst.epoch;
dr.enq(decInst); fr.deq;
endrule
March 14, 2012http://csg.csail.mit.edu/
6.S078 L11-14
![Page 15: Computer Architecture: A Constructive Approach Six Stage Pipeline/Bypassing Joel Emer](https://reader035.vdocuments.site/reader035/viewer/2022081503/568163e4550346895dd54414/html5/thumbnails/15.jpg)
Register Read Stage
March 14, 2012http://csg.csail.mit.edu/
6.S078
dr R
RegRead
rr
Readregs
RF
W
RF must beavailable to ReadSrcs and Writeback!
D
Decode
Decode
L11-15
![Page 16: Computer Architecture: A Constructive Approach Six Stage Pipeline/Bypassing Joel Emer](https://reader035.vdocuments.site/reader035/viewer/2022081503/568163e4550346895dd54414/html5/thumbnails/16.jpg)
Register Read Moduletypedef struct { Data: src1; Data: src2 } Sources;
module mkRegRead#(RFile rf)(RegRead); Reg#(Bool) scoreboardReg <- mkReg(False); Dwire#(Bool) scoreboard <-mkDwire(scoreboardReg);
rule updateScoreboard; scoreboardReg <= scoreboard; endrule
method Maybe#(Sources) readRegs(DecodeInst decInst); let src1 = rf.rd1(decInst.op1); let src2 = …
if (scoreboardReg) return tagged Invalid; else return tagged Valid Sources{src1:src1,…}; endmethod
March 14, 2012http://csg.csail.mit.edu/
6.S078 L11-16
![Page 17: Computer Architecture: A Constructive Approach Six Stage Pipeline/Bypassing Joel Emer](https://reader035.vdocuments.site/reader035/viewer/2022081503/568163e4550346895dd54414/html5/thumbnails/17.jpg)
Register Read Moduletypedef struct { Data: src1; Data: src2 } Sources;
module mkRegRead#(RFile rf)(RegRead); Reg#(Bool) scoreboardReg <- mkReg(False); method Maybe#(Sources) readRegs(DecodeInst decInst); let src1 = rf.rd1(decInst.op1); let src2 = …
if (scoreboardReg) return tagged Invalid; else return tagged Valid Sources{src1:src1,…}; endmethod
March 14, 2012http://csg.csail.mit.edu/
6.S078
To use need to instantiate with:
let readreg <- mkReadReg(rf);
L11-17
![Page 18: Computer Architecture: A Constructive Approach Six Stage Pipeline/Bypassing Joel Emer](https://reader035.vdocuments.site/reader035/viewer/2022081503/568163e4550346895dd54414/html5/thumbnails/18.jpg)
Six-Stage Register Read (cont) RWire#(Bool) next_available <-mkRWire; RWire#(Bool) next_unavailable <- mkRWire;
method markAvailable(); next_available.wset(False); endmethod method markUnavailable(); next_unavailable.wset(True); endmethod
rule updateScoreboard; if (next_unavailable matches tagged Valid .ua) scoreboardReg <= True; else if (next_available matches tagged Valid .a) scoreboardReg <= False; endruleendmodule
March 14, 2012http://csg.csail.mit.edu/
6.S078 L11-18
![Page 19: Computer Architecture: A Constructive Approach Six Stage Pipeline/Bypassing Joel Emer](https://reader035.vdocuments.site/reader035/viewer/2022081503/568163e4550346895dd54414/html5/thumbnails/19.jpg)
Six-Stage Register Readrule doRegRead; if (wbRind.notEmpty) begin readreg.markAvailable(); wbRind.deq; end let decInst = dr.first(); if (execEpoch != decInst.epoch) begin readreg.markAvailable(); dr.deq() end; else begin maybeSources = readregs.readRegs(decInst); if (maybeSources match tagged Valid .sources) begin if (writesreg(decInst)) rr.markUnavailable(); rr.enq(RegBundle{decodebundle: decInst, src1: srouces.src1, src2: sources.src2}); dr.deq(); end endendrule
March 14, 2012http://csg.csail.mit.edu/
6.S078
Better scoreboard will need register index!L11-19
![Page 20: Computer Architecture: A Constructive Approach Six Stage Pipeline/Bypassing Joel Emer](https://reader035.vdocuments.site/reader035/viewer/2022081503/568163e4550346895dd54414/html5/thumbnails/20.jpg)
Six-Stage Executerule doExecute; let decInst = rr.first.decodebundle; let epochChange = (decInst.epoch != execEpoch); let src1 = rr.first.src1; let src2 = ...
if (! epochChange) begin let execInst = exec.exec(decInst, src1, src2); if (execInst.cond) begin nextPc.enq(execInst.addr); execEpoch <= !execEpoch; end xr.enq(execInst); end rr.deq();endrule
March 14, 2012http://csg.csail.mit.edu/
6.S078 L11-20
![Page 21: Computer Architecture: A Constructive Approach Six Stage Pipeline/Bypassing Joel Emer](https://reader035.vdocuments.site/reader035/viewer/2022081503/568163e4550346895dd54414/html5/thumbnails/21.jpg)
Six-Stage Memoryrule doMemory; let execInst = xr.first;
if (execInst.itype==Ld || execInst.itype==St) begin execInst.data <- mem(MemReq{ op:execInst.itype==Ld ? Ld : St, addr:execInst.addr, data:execInst.data}); end
mr.enq(WBBundle{itype:execInst.itype, rdst:execInst.rdst, data:execInst.data}); xr.deq();endrule
March 14, 2012http://csg.csail.mit.edu/
6.S078 L11-21
![Page 22: Computer Architecture: A Constructive Approach Six Stage Pipeline/Bypassing Joel Emer](https://reader035.vdocuments.site/reader035/viewer/2022081503/568163e4550346895dd54414/html5/thumbnails/22.jpg)
Six-Stage Writebackrule doWriteBack;
wbRind.enq(mr.first.rdst);
rf.wr(mr.first.rdst, mr.first.data); mr.deq;endrule
March 14, 2012http://csg.csail.mit.edu/
6.S078 L11-22
![Page 23: Computer Architecture: A Constructive Approach Six Stage Pipeline/Bypassing Joel Emer](https://reader035.vdocuments.site/reader035/viewer/2022081503/568163e4550346895dd54414/html5/thumbnails/23.jpg)
Six Stage Waterfall
March 14, 2012http://csg.csail.mit.edu/
6.S078
From whiteboard
L11-23
![Page 24: Computer Architecture: A Constructive Approach Six Stage Pipeline/Bypassing Joel Emer](https://reader035.vdocuments.site/reader035/viewer/2022081503/568163e4550346895dd54414/html5/thumbnails/24.jpg)
Bypass
March 14, 2012http://csg.csail.mit.edu/
6.S078
RegRead Executerr
If scoreboard says register is not available then RegRead needs to stall, unless it sees what it needs on the bypass line….
What does RegRead need to do?
L11-24
![Page 25: Computer Architecture: A Constructive Approach Six Stage Pipeline/Bypassing Joel Emer](https://reader035.vdocuments.site/reader035/viewer/2022081503/568163e4550346895dd54414/html5/thumbnails/25.jpg)
Bypass Network
March 14, 2012http://csg.csail.mit.edu/
6.S078
typedef struct { Rindx regnum; Data value;} BypassValue;
Module mkBypass(BypassNetwork) Rwire#(BypassValue) bypass;
method produceBypass(Rindx regnum, Data value); bypass = BypassValue{regname: regnum, value:value}; endmethod
method Maybe#(Data) consumeBypass(Rindx regnum); if (bypass matches tagged Valid .b && b.regnum == regnum) return tagged Valid b.value; else return tagged Invalid; endmethodendmodule
Real network will have many sources. How are they ordered?
From earlier stages to laterL11-25
![Page 26: Computer Architecture: A Constructive Approach Six Stage Pipeline/Bypassing Joel Emer](https://reader035.vdocuments.site/reader035/viewer/2022081503/568163e4550346895dd54414/html5/thumbnails/26.jpg)
Register Read (with bypass)module mkRegRead#(RFile rf, BypassNetwork bypass)(RegRead); method Maybe#(Sources) readRegs(DecodeInst decInst); let src1 = rf.rd1(decInst.op1); let src2 = … if (!scoreboardReg) return tagged Valid Sources{src1:src1,…}; else begin let b1 = bypass.consumebypass(decInst.op1); let b2 = if (b1 matches tagged Valid .v1 && b2 matches…) return tagged Valid Sources{src1:v1.value …); else return tagged Invalid; end endmethod
March 14, 2012http://csg.csail.mit.edu/
6.S078 L11-26