MIPS Pipelining Chapter 4 Sections 4.5 – 4.8 Dr. Iyad F. Jafar Outline 2 Introduction Why Pipelining? MIPS Pipelined Datapath MIPS Pipelined Control Pipelining Hazards Structural Hazards Data Hazards Control Hazards Exceptions and Interrupts Fallacies and Pitfalls Reading Assignment Introduction Single-cycle datapath Simple! Hardware replication? Cycle time? Multi-cycle datapath More involved Less HW replication of major units Better performance if the delay of major functional units is balanced! Can we do any better? Pipelining! 3 Pipelining Introduction In Multi-cycle, only one major unit is used in each cycle while other units are idle! Why not to use them to do something else? Basically, start the next instruction before the current one is finished! Cycle 1 LW SW R-Type 4 IFetch Cycle 2 Cycle 3 Cycle 4 Cycle 5 Cycle 6 Cycle 7 Cycle 8 Dec Exec Mem WB IFetch Dec Exec Mem WB IFetch Dec Exec Mem WB Introduction Pipelining The time required to execute one instruction 5 (Instruction latency) is not affected! However, the number of instructions finished per unit time (Throughput) is increased Thus, Pipelining improves the throughput not latency! Most modern processors are pipelined! Notes As in multi-cycle, the cycle time is determined by the slowest unit! However, similar to single-cycle, we can get one instruction done every cycle! It is assumed that all instructions take the same number of cycles! Introduction Single Cycle Implementation: Cycle 1 Cycle 2 Clk lw sw Waste R-type Multiple Cycle Implementation: Cycle 1 Cycle 2 Cycle 3 Cycle 4 Cycle 5 Cycle 6 Cycle 7 Cycle 8 Cycle 9Cycle 10 Clk lw IFetch R-type sw Dec Exec Mem WB IFetch Dec Pipeline Implementation: lw IFetch sw Dec Exec Mem WB IFetch Dec Exec Mem WB Dec Exec Mem R-type IFetch 6 WB Exec Mem IFetch Why Pipelining? For Performance! IM Reg DM IM Reg DM IM Reg DM IM Reg ALU Inst 4 DM ALU Inst 3 Reg ALU Inst 2 IM ALU O r d e r Inst 1 Inst 5 7 Once the pipeline is full, one instruction is completed every cycle, so CPI = 1 (similar to Singlecycle) ALU I n s t r. Time (clock cycles) Time to fill the pipeline Reg Reg Reg Reg DM Reg Why Pipelining? Example 1. Comparing pipelining to single-cycle Consider a program that consists of a large number of LOAD instructions only that is executed on a single-cycle CPU and 5-stage pipelined CPU with the operation time for the major units (memory, ALU, and register file) to be 200 ps in both cases. 1) Determine the time required to finish executing 1,000,000 LOAD instructions and compute the speed up of pipelining. 2) Determine the time required to finish executing the first 3 LOAD instructions 3) Repeat (1) and (2) if the delay of the register file is 100 ps instead of 200 ps. 8 Cycle times for the two implementations CCSC = 200 + 200 + 200 + 200 + 200 = 1000 ps CCPP = 200 ps Why Pipelining? Example 1. Comparing pipelining to single-cycle 1) Determine the time required to finish executing 1,000,000 LOAD instructions and compute the speed up of pipelining. Single-cycle Pipelining TimeSC = 1000 ps x 1000000 = 1,000,000,000 ps TimePP = 1000 ps + 200 ps x 999999 = 200,000,800 ps Speeup = 1,000,000,000 / 200,000,800 = 4.99998 (very close to the number of stages) 9 Why Pipelining? Example 1. Comparing pipelining to single-cycle 2) Determine the time required to finish executing the first 3 LOAD instructions and compute the speed up of pipelining Single-cycle TimeSC = 1000 x 3 = 3000 ps Pipelining TimePP = 200 x 5 +200 + 200 = 1400 ps 10 Speeup = 3000 / 1400 = 2.14 (less than the number of stages) Why Pipelining? Example 1. Comparing pipelining to single-cycle 3) Repeat (1) and (2) if the delay of the register file is 100 ps . CCSC = 200 + 100 + 200 + 200 + 100 = 800 ps CCPP = 200 ps For 1,000,000 instructions TimeSC = 800 x 1,000,000 = 800,000,000 ps TimePP = 1000+ 200x999,999 = 200,000,800ps Speeup = 800,000,000/ 200,000,600 = 3.99998 (<5) For 3 instructions TimeSC = 800 x 3 = 2400 ps TimePP = 1000 + 200x 2 = 1400 ps 11 Speeup = 2400/ 1400 = 1.71 (<5) Why Pipelining? Example 1. Summary Ideally, the pipeline speedup is n times faster than the singlecycle, where n is the number of pipeline stages. In the 5-stage MIPS, the pipelined version would be 5 times faster. When the pipeline is full, the throughput will be one instruction per cycle Many factors affect pipelining performance 12 Time to fill empty the pipeline Number of instructions to execute Unbalancecd delay of pipeline stages Instruction mix Pipeline hazards Ideally, the number of cycles required to finish M instructions in N-stages pipeline is N + M – 1 Pipelined MIPS Datapath What do we need to implement pipelining? We need to consider the following: 1. The execution of instructions is divided into 5 stages (cycles): Instruction fetch (IF) , Instruction decode (ID), Execute (EX), Memory Access (MEM), Write Back (WB) 2. Instruction flow is from left to right except in two cases In the write-back stage where the result is written into the register file in the middle of the datapath Choosing between the incremented PC and the branch address in the MEM stage In pipelining, all units are operating in every cycle; thus we have to duplicate hardware where needed Since the execution is over multiple cycles, we need to add State (Pipeline) registers between stages to preserve intermediate data and control for each instruction. 3. 4. 13 These registers hold the values to be used in later stages as long as they are needed. Pipelined MIPS Datapath ID EX + Shift left 2 File Write Addr Read Data 2 Write Data 16 Sign Extend 32 System Clock 14 Any problem? ALU Exec/Mem Read Address Register Read Read Addr 2Data 1 WB + Read Addr 1 Dec/Exec PC Instruction Memory IFetch/Dec 4 MEM Data Memory Address Write Data Read Data Mem/WB IF Pipelined MIPS Datapath ID EX + Shift left 2 File Write Addr Read Data 2 Write Data 16 Sign Extend ALU Exec/Mem Read Address Data Memory Register Read Read Addr 2Data 1 Address Write Data 32 System Clock 15 WB + Read Addr 1 Dec/Exec PC Instruction Memory IFetch/Dec 4 MEM Need to preserve the destination register ! Read Data Mem/WB IF Pipelined MIPS Datapath Example 2. Execution of LW instruction (1) Instruction Fetch: Put PC and the loaded instruction in the IF/ID register 16 Pipelined MIPS Datapath Example 2. Execution of LW instruction (2) Instruction Decode and Read Registers: Store Reg[rs], Reg[rt], sign extended offset , rd, rt, and the updated PC (why?) in the ID/EX register 17 MIPS Pipelining Example 2. Execution of LW instruction (3) Execute Or Address Calculation: Store branch address, Reg[rt], result, and zero flag in the EX/MEM register 18 Pipelined MIPS Datapath Example 2. Execution of LW instruction (4) Memory Access: Store the data from memory into MEM/WB register 19 Pipelined MIPS Datapath Example 2. Execution of LW instruction (5) Write Back: Copy the data loaded in the MEM/WB register to register file 20 Pipelined MIPS Datapath Required data fields in the pipelining registers Data fields are moved from one pipeline register to another every clock cycle until they are no longer needed 21 Pipeline Register Data Fields Register Size IF/ID Instruction and PC 64 bits ID/EX PC, Reg[rs], Reg[rt], sign-extended offset, rt, rd 138 bits EX/MEM Branch address, Zero, ALU result, Reg[rt], Destination register address (rt or rd) 103 bits MEM/WB ALU Result, Data from memory, Destination register address 69 Pipelined MIPS Control All control signals can be determined during Decode stage while they are needed in later stages! Solution! Expand the pipeline registers to store and move the control signals between stages until they are needed 22 Pipelined MIPS Control Define the control signals and generate them in the decode stage For the time being, no explicit write signals are required for the pipeline registers since the are updated every cycle 23 Pipelined MIPS Control Control signals needed in each stage Pipeline Stage Control signals IF None ID None EX RegDst, ALUOp1, ALUOp0, ALUSrc MEM Branch, MemRead, MemWrite WB MemtoReg, RegWrite Control signal values based on instruction type 24 MIPS Pipeline Example 3. Given the code segment and the register contents below, show the contents of the data and control fields in the pipeline registers if the sixth instruction has been fetched (i.e. the beginning of cycle 7) Address 25 Instruction 0x00000000 lw $10, 20($1) 0x00000004 sub $11,$1,$2 0x00000008 add $12,$3,$4 0x0000000c lw $13, 24($1) 0x00000010 add $3,$2,$1 0x00000014 Sub $1,$5,$6 Register Contents $1 1 $2 5 $3 3 $4 -6 $5 2 $6 7 $11 12 $12 -15 $13 10 MIPS Pipeline Example 3. Multi-cycle diagram sub $1,$5,$6 DM IM Reg DM IM Reg DM IM Reg DM IM Reg ALU 26 add $3,$2,$1 Reg ALU lw $13, 24($1) IM ALU O r d e r add $12,$3,$4 DM ALU sub $11,$1,$2 Reg ALU I n s t r. IM ALU lw $10, 20($1) Time Reg Reg Reg Reg Reg DM Reg MIPS Pipeline Example 3. Single-cycle diagram sub $1,$5,$6 27 add $3,$2,$1 lw $13, 24($1) add $12,$3,$4 sub $11,$1,$2 MIPS Pipeline Example 3. At the beginning of cycle 7, the sixth instruction is stored in the IF/ID register while the data and control for earlier instructions are pushed to next pipeline registers and the register files. Thus, IF/ID register No control signals are stored Store the instruction sub $1,$5,$6 and PC+4 28 IF/ID.Instruction = 0x00A60822 IF/ID.PC = 0x00000018 MIPS Pipeline Example 3. ID/EX register Store the information of add $3,$2,$1 and PC+4 ID/EX.PC = 0x00000014 ID/EX.RegRsContents = 0x00000005 ID/EX.RegRtContents = 0x00000001 ID/EX.RegRt = (00001)2 ID/EX.RegRd = (00011)2 ID/EX.SignExtend = 0x00001820 Control Information 29 ID/EX.MemToReg = 0 ID/EX.RegWrite = 1 ID/EX.MemRead = 0 ID/EX.MemWrite = 0 ID/EX.Branch = 0 ID/EX.ALUSrc = 0 ID/EX.RegDst = 1 ID/EX.ALUOp = (10)2 MIPS Pipeline Example 3. EX/MEM register Store the information of lw $13,24($1), branch address, and memory address EX/MEM.BranchAddress = 0x00000070 EX/MEM.ALUOut = 0x00000019 EX/MEM.Zero = 0 EX/MEM.RegDestination= (01101)2 EX/MEM.RegRtContents = 0x0000000A Control Information 30 EX/MEM.MemToReg = 0 EX/MEM.RegWrite = 1 EX/MEM.MemRead = 1 EX/MEM.MemWrite = 0 EX/MEM.Branch = 0 MIPS Pipeline Example 3. MEM/WB register Store the information of add $12, $3,$4, addition result, and data memory MEM/WB.RegDestination= (01100)2 MEM/WB.ALUOut = 0xFFFFFFFD MEM/WB.MemoryData = XXXX Control Information MEM/WB.MemToReg = 0 MEM/WB.RegWrite = 1 For the sub $11, $1,$2 31 It will be writing (1 - 5) to $11 Pipelining Hazards In general, pipelining is effective! MIPS ISA makes even easy All instructions are of the same length (32 bits) Can fetch the next instruction once the current is being decoded Few instruction formats with symmetry across them Can read the register file in the 2nd stage Memory access is through the Load and Store instructions Can use the execute stage to compute the address Each MIPS instruction writes at most one result in the MEM or WB stage Is it that easy? Any complications? YES! PIPELINING HAZARDS ! 32 Pipelining Hazards Hazards - problems the might occur during pipeline operation Three basic sources Structural Hazards In pipelining, all functional units are used in any cycle What if two instructions use the same functional unit in the same cycle? Data Hazards In pipelining, execution of instructions is overlapped What if the operand(s) of some instruction comes from an earlier instruction that is still in the pipeline? Control Hazards In pipelining, an instruction is fetched every cycle What if an instruction is a jump or a branch instruction that evaluates to true? The following instruction(s) in the pipeline might not be correct? Simple Solution? Wait until the issue is resolved! 33 Structural Hazards Reading from memory twice in the same cycle! Single Memory! Time (clock cycles) Inst 4 34 Reg Reg Mem Reg Mem Reg Mem Reg Mem Reg Mem Reg Mem Reg ALU Inst 3 Mem Mem ALU Inst 2 Reg ALU Inst 1 Mem ALU O r d e r lw ALU I n s t r. Mem Solution: Use two memories; Data and Instruction! Reg Structural Hazards Single Register File! DM IM Reg DM IM Reg DM IM Reg ALU Inst 1 Reg ALU 35 IM ALU O r d e r add $1, One instruction is writing and the other is reading the register file? ALU I n s t r. Time (clock cycles) Inst 2 add $2,$1, clock edge that controls register writing Reg Reg Reg DM Solution: Design the register file to write in the first half of the cycle and read in the second half! Reg clock edge that controls loading of pipeline state registers Data Hazards xor $4,$1,$5 36 Reg DM IM Reg DM IM Reg DM IM Reg ALU $8,$1,$9 IM ALU or DM ALU and $6,$1,$7 Reg ALU sub $4,$1,$5 IM ALU add $1, Reg Reg • Dependencies backward in time cause hazards • This is called Read-after-Write (RAW) data hazard • Register-use data hazard Reg Reg DM Reg Solution? Data Hazards Simply, wait for the earlier instruction to finish! This is called stalling the pipeline! However, this affects the CPI? Reg Reg IM Reg DM IM Reg stall stall sub $4,$1,$5 and $6,$1,$7 37 DM ALU IM ALU O r d e r add $1, ALU I n s t r. Do we need two stalls all the time? Reg DM Reg Data Hazards xor $4,$1,$5 38 Reg DM IM Reg DM IM Reg DM IM Reg ALU $8,$1,$9 IM ALU or DM ALU and $6,$1,$7 Reg ALU sub $4,$1,$5 IM ALU lw $1,5($s1) Reg Reg • Dependencies backward in time cause hazards • It is a Read-after-Write (RAW) data hazard • Load-use data hazard Reg Reg DM Reg Solution? Data Hazards Again, wait for the LW instruction to finish by stalling the pipeline! However, this affects the CPI? DM Reg IM Reg DM IM Reg stall stall sub $4,$1,$5 and $6,$1,$7 39 Reg ALU IM ALU O r d e r lw $1, ALU I n s t r. Reg DM Reg Data Hazards Example 4. how many cycles are actually required to execute the following code? Assume the pipeline is already full. Ideally, and since the pipeline add $1, $2, $5 add $5, $3, $1 sub $10, $7, $8 sub $5, $6, $7 lw $3, 45($9) add $3, $3, $8 40 is full, each instruction requires 1 cycle. Thus, we need 6 cycles (CPI =6/6= 1). However, … Register-use data hazard Adds 2 cycles by stalls Load-use data hazard Adds 2 cycles by stalls Thus, 10 cycles are needed. CPI = 10/6 = 1.667 ?? Performance ?? Can we do any better? Data Hazards Fixing Register-use Hazard by Forwarding Note that data produced by an instruction and needed by a later instruction is pushed through the pipeline registers until it is saved into the register file ! Why not to read the data from the pipeline registers before it is stored ? This is called forwarding! What is required? Need to detect the hazard Is any of the source registers for the instruction the same as the destination register for an earlier instruction that is still in the pipeline? Need to create a path to pass the data between pipeline stages Instead of reading the source registers of the instruction from the register file, read them from the pipeline registers 41 Data Hazards Fixing Register-use Hazard by Forwarding or $8,$1,$9 IM Reg DM IM Reg DM IM Reg DM IM Reg ALU and $6,$1,$7 DM ALU sub $4,$1,$5 Reg ALU IM ALU O r d e r add $1, ALU I n s t r. xor $4,$1,$5 42 No Stalls! Reg Reg Reg Reg DM Reg Data Hazards Forwarding Hardware implementation 43 Note that forwarding could be from EX/MEM or from MEM/WB! Why? Data Hazards Forwarding Hardware implementation Inside the forwarding unit (1) Forwarding from EX/MEM (MEM Stage) if (EX/MEM.RegWrite and (EX/MEM.RegRd != 0) and (EX/MEM.RegRd = ID/EX.RegRs)) then ForwardA = From EX/MEM if (EX/MEM.RegWrite and (EX/MEM.RegRd != 0) and (EX/MEM.RegRd = ID/EX.RegRt)) then ForwardB = From EX/MEM Why to check the RegWrite signal? 44 Why to check the Zero register? Data Hazards Forwarding Hardware implementation Inside the forwarding unit (2) Forwarding from MEM/WB (WB Stage) if (MEM/WB.RegWrite and (MEM/WB.RegRd != 0) and (MEM/WB.RegRd = ID/EX.RegRs)) then ForwardA = From MEM/WB if (MEM/WB.RegWrite and (MEM/WB.RegRd != 0) and (MEM/WB.RegRd = ID/EX.RegRt)) then ForwardB = From MEM/WB 45 Data Hazards Can the forwarding hardware be used with Load-use data hazard? or $8,$1,$9 xor $4,$1,$5 46 IM Reg DM IM Reg DM IM Reg DM IM Reg ALU and $6,$1,$7 DM ALU sub $4,$1,$5 Reg ALU $1,4($2) IM ALU O r d e r lw ALU I n s t r. Reg Reg Reg We still need 1 Stall for the instruction following the load? Reg DM Reg Data Hazards How to stall the pipeline? Stall is required when the instruction in the EX stage is Load and the one in the ID stage depends on the loaded value The Load instruction moves normally to EX/MEM on the next cycle The conflicting instruction (the instruction following the load) should stay in the decode stage? How? Don’t write the IF/ID register need IF/IDWrite Signal Don’t update the PC need PCWrite Signal The control signals of the instruction in the decode stage are stored as 0’s (WHY?) in the ID/EX need a multiplexor for the control signals Controlling the process requires a special unit; Hazard Detection Unit 47 Data Hazards Stall Implementation 48 Data Hazards Stall Implementation Inside hazard detection unit if (ID/EX.MemRead and [(ID/EX.RegRt == IF/ID.RegRs) or (ID/EX.RegRt == IF/ID.RegRt)]) then PCWrite = 0 IF/IDWrite = 0 Select 0’s as control signals Any Problem? Do we need to stall in all cases? How about j and jal that come immediately after load with rs and/or rt fields being the same as the rt field of the load? 49 Data Hazards Example 5. Consider the following code segment in C A=B+E C=B+F (1) Generate the MIPS code assuming that variables A, B, C, E, and F are in memory and addressable with offsets 0, 4, 8, 12, and 16 from $t0 (2) Find all the data hazards and determine the number of cycles required to run the code. Assume forwarding is implemented. (3) Can you reorder the code to reduce the stalls ? 50 Data Hazards Example 5. lw lw add sw lw add sw 51 $t1, 4($t0) $t2, 12($t0) $t3, $t1, $t2 $t3, 0($t0) $t4, 16($t0) $t5, $t1, $t4 $t5, 8($t0) # loads B # loads E #A=B+E # stores A # loads F #C=B+F # stores C Thus, 13 cycles are needed. CPI = 13/7 = 1.86 ?? Performance ?? Ideally, each instruction requires 1 cycle after the pipeline is full. Thus, we need (5+7-1) cycles. CPI = 11/7 = 1.57 Load-use data hazard Adds 1 cycle as a stall Load-use data hazard Adds 1 cycle as a stall Data Hazards Example 5. Reducing stalls by instruction reordering lw lw lw add sw lw add sw 52 $t1, 4($t0) $t2, 12($t0) $t4, 16($t0) $t3, $t1, $t2 $t3, 0($t0) $t4, 16($t0) $t5, $t1, $t4 $t5, 8($t0) # loads B # loads E # loads F #A=B+E # stores A # loads F #C=B+F # stores C Moving this instructions fills the first stall and eliminate the second one! Thus, 11 cycles are needed. CPI = 11/7 = 1.57 Data Hazards Example 6. Assume that the pipelined MIPS processor without forwarding is used to run a program with the following instruction mix: 20% loads, 20% store, and 60% ALU. Then compute the average CPI given that 10% of the ALU instructions result in load-use hazards. 15% of the ALU instructions result in read-before-write hazards. Solution Ideally, the average CPI is 1 for each instruction With no forwarding Load-use hazards add two cycles Register-use hazards add two cycles Average CPI = 0.2 x 1 + 0.2 x 1 + 0.75 x 0.60 x 1 + 53 0.1 x 0.60 x 3 + 0.15 x 0.60 x 3 = 1.30 Control Hazards For the pipelined datapath designed so far, the branch address and decision are known by the end of the MEM stage Instructions following the branch instruction in the pipeline are not correct if the branch evaluates to true! If the branch is true, then these instructions should be removed from the pipeline and execution should continue from the branch address Otherwise, no action is required! This is a dependency backward in time Control Hazard 54 55 Branch Inst1 Inst2 Inst3 Control Hazards Solution! Once it is known that the instruction is branch, then stall the pipeline for 3 cycles? Is it actually a stall? Control Hazards IM Reg Reg stall stall stall Fetching from instruction memory is either from PC+4 or Branch address depending on the branch result IM Reg IM DM Reg ALU Inst Inst 56 DM ALU O r d e r beq ALU I n s t r. Reg DM Are these actual stalls? Why not to start the execution of the following instructions normally and if the branch is true, then flush these instructions?! Control Hazards Reducing the Cost of Branch Hazard Note that three cycles are lost if the branch evaluates to true in order to remove the three instructions following the branch instruction! This could affect the performance significantly! Can we reduce this cost? Move the branch address computation to the decode stage Add additional hardware to compare the two registers in the ID stage! Whenever there is a branch instruction in the ID/EX register (ID/EX.branch =1), flush the instruction in the IF/ID register. The branch penalty in this case will be 1 cycle instead of 3 cycles! 57 Control Hazards Reducing the Cost of Branch Hazard 58 Control Hazards Reducing the Cost of Branch Hazard IM Reg ALU beq DM IM Reg Reg stall ALU lw DM Reg Modifying the Hazard Detection Unit IF (ID/EX.Branch) then Flush IF/ID register Note that we lose one cycle whenever a branch 59 instruction is encountered! Can we do any better? Control Hazards Reducing the Cost of Branch Hazard Approach I – Static Branch Prediction Always predict the branch as Not Taken and start fetching the instruction following the branch If the branch evaluates to Not Taken, then the prediction is correct and no further actions are required! If the branch evaluates to Taken, then the prediction is not correct! Remove the fetched instruction and start fetching from the branch address In this approach, we only lose one cycle if the prediction is not correct Inside the hazard detection unit IF (ID/EX.Branch) and (ID/EX.ZERO) Then Flush IF/ID register 60 Control Hazards Reducing the Cost of Branch Hazard Approach II – Dynamic Branch Prediction Prediction could be Taken or Not Taken If the branch is predicted as Not Taken Fetch the next instruction If prediction is false, flush the instruction. One cycle is lost! If branch is predicted as Taken Fetch the instruction from the branch address If prediction is false, flush and fetch from PC+4 How to store branch prediction? Use Branch History Table or Branch Prediction Buffer The table is addressable by the lower bits of the branch instruction address If branch is predicted as taken, we need to wait for the branch address to be computed? Use Branch Target Buffer 61 Control Hazards Approach II – Dynamic Branch Prediction 1-bit Branch Predictor Basically we have two states (Taken and Not Taken) One bit is used to store the prediction Prediction state is changed when prediction is wrong Performance Issues 62 Consider branching in loops? EXAMPLE? Control Hazards Approach II – Dynamic Branch Prediction 2-bit Branch Predictor Basically we have four states two bits are used to store the prediction Prediction state is changed when prediction is wrong twice 63 Control Hazards Example 7. Consider a certain program that have a conditional branch instruction whose actual outcome is given below when the program is executed. T-T-N-T-T-N-T List predictions for the following branch prediction schemes and find the prediction accuracy. 64 1. Predict always taken 2. Predict always not taken 3. 1-bit predictor, initialized to predict taken 4. 2-bit predictor, initialized to weakly predict taken Control Hazards Example 7. Actual branch actions : T-T-N-T-T-N-T Predict as always taken Predictions : T-T-T-T-T-T-T Accuracy = 5/7 = 71% Predict as always not taken Predictions : N-N-N-N-N-N-N Accuracy = 2/7 = 29% 1-bit predictor initialized to predict taken Predictions: T-T-T-N-T-T-N Accuracy = 3/7 = 43% 2-bit predictor initialized to weakly predict taken Predictions: T-T-T-T-T-T-T Accuracy = 5/7 = 71% 65 Pipelining Performance Example 8. Let’s compare the performance of single-cycle, multi-cycle, and pipeline implementation of MIPS processor given the operation times and instruction mix below. For the pipelined implementation, assume that: 1) Branch decision is done in the MEM cycle. Branch handling in the pipeline implementation is done by stalling the pipeline. 2) Half of the load instructions incur load-use hazard. 3) Forwarding is implemented. 4) The jump instruction is completed in the ID stage 66 Instruction type Percentage % Unit Time (ps) ALU 52 Memory 200 Load 25 ALU and adders 100 Store 10 Register File 50 Branch 11 Jump 2 Pipelining Performance Example 8. Clock cycle time Single-cycle = 200 + 50 + 100 + 50 + 200 = 600 ps Multi-cycle = 200 ps Pipeline = 200 ps CPI Single-cycle = 1 Multi-cycle = 5x 0.25 + 4x0.52 + 4x0.10 + 3x0.11 + 3x0.02 = 4.12 Pipeline = 0.125x2 + 0.125x1 + 0.52x1 + 0.1x1 + 0.11x4 + 0.02x2 = 1.475 Execution Time per instruction Single-cycle = 600 ps Multi-cycle = 4.12 x 200 ps = 824 ps Pipeline = 1.475 x 200 = 295 ps 67 Pipelining Performance Example 9. Redo example 8 by assuming that branch prediction is employed and 1/4th of the branch instructions are miss predicted. 68 Exceptions & Interrupts Exceptions and interrupts are unexpected events that require the change in the flow The two terms are used interchangeably and depending is ISA Intel x86 uses the term interrupt only In MIPS Exceptions: any internal unexpected change in the flow (undefined opecode, overflow, system calls) Interrupts: the event is external (I/O controller request) Dealing with them Is a challenging part of processor design Affects performance 69 Exceptions & Interrupts In MIPs, when an exception is generated, the following sequence of steps are taken The address of the offending instruction is saved into a special called the Exception Program Counter (EPC). The cause of the exception is saved in a special register called the Cause Register. The control is transferred to the operating system by loading a special address (0x8000 00180) into the PC. The code loaded starting at this address Determines what actions will be done by the operating system in response to the exception based on the value found in the Cause Register. The operating system may terminate the program or resume the execution using the value found in the EPC 70 Overflow Exception Modifications to the Datapath 71 Fallacies Fallacy 1. Pipelining is easy ! Not true ! Hazards complicate the operation Fallacy 2. Pipelining is independent of technology! Why didn’t we have pipelined processors before ? Advanced technology allowed more transistors and thus more operations ! 72 Reading Assignment Read the following from the textbook Section 4.9 – Exceptions Section 4.10 – Parallelism and Advanced Instruction Level Parallelism 73