140 likes | 265 Views
Pipelining IV CS429: Computer Organization, Architecture & Programming . Haran Boral. Implementing Pipeline Control. Combinational logic generates pipeline control signals Action occurs at start of following cycle. Initial Version of Pipeline Control. bool F_stall =
E N D
Pipelining IV CS429: Computer Organization, Architecture & Programming Haran Boral
Implementing Pipeline Control • Combinational logic generates pipeline control signals • Action occurs at start of following cycle
Initial Version of Pipeline Control boolF_stall = # Conditions for a load/use hazard E_icode in { IMRMOVL, IPOPL } && E_dstM in { d_srcA, d_srcB } || # Stalling at fetch while ret passes through pipeline IRET in { D_icode, E_icode, M_icode }; boolD_stall = # Conditions for a load/use hazard E_icode in { IMRMOVL, IPOPL } && E_dstM in { d_srcA, d_srcB }; boolD_bubble = # Mispredicted branch (E_icode == IJXX && !e_Bch) || # Stalling at fetch while ret passes through pipeline IRET in { D_icode, E_icode, M_icode }; boolE_bubble = # Mispredicted branch (E_icode == IJXX && !e_Bch) || # Load/use hazard E_icode in { IMRMOVL, IPOPL } && E_dstM in { d_srcA, d_srcB};
Control Combinations • Two special cases that can arise on same clock cycle • Combination A • Not-taken branch • ret instruction at branch target • Combination B • Instruction that reads from memory to %esp • Followed by ret instruction
1 1 1 Mispredict ret ret ret M M M M M JXX JXX E E E E E ret ret ret D D D D D Combination A Control Combination A • Should handle as mispredicted branch • Stalls F pipeline register • But PC selection logic will be using M_valM anyhow
Control Combination B 1 1 1 Load/use ret ret ret • Would attempt to bubble and stall pipeline register D • Signaled by processor as pipeline error M M M M Load E E E E Use ret ret ret D D D D Combination B
Handling Control Combination B 1 1 1 Load/use ret ret ret • Load/use hazard should get priority • ret instruction should be held in decode stage for additional cycle M M M M Load E E E E Use ret ret ret D D D D Combination B
Corrected Pipeline Control Logic boolD_bubble = # Mispredicted branch (E_icode == IJXX && !e_Bch) || # Stalling at fetch while ret passes through pipeline IRET in { D_icode, E_icode, M_icode } # but not condition for a load/use hazard && !(E_icode in { IMRMOVL, IPOPL } && E_dstM in { d_srcA, d_srcB }); • Load/use hazard should get priority • ret instruction should be held in decode stage for additional cycle
Pipeline Summary • Data Hazards • Most handled by forwarding • No performance penalty • Load/use hazard requires one cycle stall • Control Hazards • Cancel instructions when detect mispredicted branch • Two clock cycles wasted • Stall fetch stage while ret passes through pipeline • Three clock cycles wasted • Control Combinations • Must analyze carefully • First version had subtle bug • Only arises with unusual instruction combination
Performance Analysis with Pipelining • Ideal pipelined machine: CPI = 1 • One instruction completed per cycle • But much faster cycle time than unpipelined machine However - hazards are working against the ideal • Hazards resolved using forwarding are fine • Stalling degrades performance and instruction completion rate is interrupted • CPI is measure of “architectural efficiency” of design
Computing CPI • CPI • Function of useful instruction and bubbles • Cb/Ci represents the pipeline penalty due to stalls • Can reformulate to account for • load penalties (lp) • branch misprediction penalties (mp) • return penalties (rp)
Computing CPI - II • So how do we determine the penalties? • Depends on how often each situation occurs on average • How often does a load occur and how often does that load cause a stall? • How often does a branch occur and how often is it mispredicted • How often does a return occur? • We can measure these • simulator • hardware performance counters • We can estimate through historical averages • Then use to make early design tradeoffs for architecture
Computing CPI - III • CPI = 1 + 0.31 = 1.31 == 31% worse than ideal • This gets worse when: • Account for non-ideal memory access latency • Deeper pipelines (where stalls per hazard increase)
Summary • Today • Pipeline control logic • Effect on CPI and performance • Next Time • Further mitigation of branch mispredictions • State machine design