1 Lecture: Pipeline Wrap-Up and Static ILP Topics: multi-cycle instructions, precise exceptions, deep pipelines, compiler scheduling, loop unrolling, software.

Slides:



Advertisements
Similar presentations
1 Lecture 5: Static ILP Basics Topics: loop unrolling, VLIW (Sections 2.1 – 2.2)
Advertisements

ENGS 116 Lecture 101 ILP: Software Approaches Vincent H. Berk October 12 th Reading for today: , 4.1 Reading for Friday: 4.2 – 4.6 Homework #2:
Computer Organization and Architecture (AT70.01) Comp. Sc. and Inf. Mgmt. Asian Institute of Technology Instructor: Dr. Sumanta Guha Slide Sources: Based.
CPE 631: ILP, Static Exploitation Electrical and Computer Engineering University of Alabama in Huntsville Aleksandar Milenkovic,
Instruction Level Parallelism María Jesús Garzarán University of Illinois at Urbana-Champaign.
1 Lecture: Static ILP Topics: compiler scheduling, loop unrolling, software pipelining (Sections C.5, 3.2)
Eliminating Stalls Using Compiler Support. Instruction Level Parallelism gcc 17% control transfer –5 instructions + 1 branch –Reordering among 5 instructions.
EECC551 - Shaaban #1 Fall 2003 lec# Pipelining and Exploiting Instruction-Level Parallelism (ILP) Pipelining increases performance by overlapping.
1 Lecture: Static ILP Topics: loop unrolling, software pipelines (Sections C.5, 3.2)
Dynamic Branch PredictionCS510 Computer ArchitecturesLecture Lecture 10 Dynamic Branch Prediction, Superscalar, VLIW, and Software Pipelining.
CS152 Lec15.1 Advanced Topics in Pipelining Loop Unrolling Super scalar and VLIW Dynamic scheduling.
Pipelining 5. Two Approaches for Multiple Issue Superscalar –Issue a variable number of instructions per clock –Instructions are scheduled either statically.
1 Advanced Computer Architecture Limits to ILP Lecture 3.
1 Lecture 10: Static ILP Basics Topics: loop unrolling, static branch prediction, VLIW (Sections 4.1 – 4.4)
Lecture: Pipelining Basics
1 Lecture: Pipelining Extensions Topics: control hazards, multi-cycle instructions, pipelining equations.
1 Copyright © 2012, Elsevier Inc. All rights reserved. Chapter 3 (and Appendix C) Instruction-Level Parallelism and Its Exploitation Computer Architecture.
1 Lecture: Pipeline Wrap-Up and Static ILP Topics: multi-cycle instructions, precise exceptions, deep pipelines, compiler scheduling, loop unrolling, software.
1 Lecture: Static ILP Topics: predication, speculation (Sections C.5, 3.2)
1 Lecture 17: Basic Pipelining Today’s topics:  5-stage pipeline  Hazards and instruction scheduling Mid-term exam stats:  Highest: 90, Mean: 58.
1 Lecture 4: Advanced Pipelines Data hazards, control hazards, multi-cycle in-order pipelines (Appendix A.4-A.10)
EECC551 - Shaaban #1 Winter 2002 lec# Pipelining and Exploiting Instruction-Level Parallelism (ILP) Pipelining increases performance by overlapping.
EECC551 - Shaaban #1 Spring 2006 lec# Pipelining and Instruction-Level Parallelism. Definition of basic instruction block Increasing Instruction-Level.
EECC551 - Shaaban #1 Fall 2005 lec# Pipelining and Instruction-Level Parallelism. Definition of basic instruction block Increasing Instruction-Level.
1 Lecture 5: Pipeline Wrap-up, Static ILP Basics Topics: loop unrolling, VLIW (Sections 2.1 – 2.2) Assignment 1 due at the start of class on Thursday.
Chapter 2 Instruction-Level Parallelism and Its Exploitation
EECC551 - Shaaban #1 Fall 2002 lec# Floating Point/Multicycle Pipelining in MIPS Completion of MIPS EX stage floating point arithmetic operations.
1 Lecture 6: Static ILP Topics: loop analysis, SW pipelining, predication, speculation (Section 2.2, Appendix G)
1 Lecture 4: Advanced Pipelines Data hazards, control hazards, multi-cycle in-order pipelines (Appendix A.4-A.10)
EECC551 - Shaaban #1 Winter 2011 lec# Pipelining and Instruction-Level Parallelism (ILP). Definition of basic instruction block Increasing Instruction-Level.
EECC551 - Shaaban #1 Spring 2004 lec# Definition of basic instruction blocks Increasing Instruction-Level Parallelism & Size of Basic Blocks.
1 Lecture 6: Static ILP Topics: loop analysis, SW pipelining, predication, speculation (Section 2.2, Appendix G) Assignment 2 posted; due in a week.
1 Lecture 4: Advanced Pipelines Control hazards, multi-cycle in-order pipelines, static ILP (Appendix A.4-A.10, Sections )
1 Lecture 6: Static ILP Topics: loop analysis, SW pipelining, predication, speculation (Section 2.2, Appendix G) Please hand in Assignment 1 now Assignment.
Pipelining and Exploiting Instruction-Level Parallelism (ILP)
CIS 662 – Computer Architecture – Fall Class 16 – 11/09/04 1 Compiler Techniques for ILP  So far we have explored dynamic hardware techniques for.
1 Lecture: Pipelining Extensions Topics: control hazards, multi-cycle instructions, pipelining equations.
Compiler Techniques for ILP
CPE 731 Advanced Computer Architecture ILP: Part V – Multiple Issue
CS5100 Advanced Computer Architecture Instruction-Level Parallelism
Lecture: Pipelining Extensions
CSCE430/830 Computer Architecture
Lecture 11: Advanced Static ILP
CPE 631 Lecture 13: Exploiting ILP with SW Approaches
Pipelining: Advanced ILP
Lecture 6: Advanced Pipelines
Lecture 6: Static ILP, Branch prediction
Lecture: Static ILP Topics: compiler scheduling, loop unrolling, software pipelining (Sections C.5, 3.2)
Lecture 5: Pipelining Basics
Lecture: Static ILP Topics: predication, speculation (Sections C.5, 3.2)
Lecture: Static ILP Topics: loop unrolling, software pipelines (Sections C.5, 3.2)
Lecture: Static ILP Topics: predication, speculation (Sections C.5, 3.2)
Lecture: Static ILP Topics: loop unrolling, software pipelines (Sections C.5, 3.2) HW3 posted, due in a week.
Lecture: Pipelining Extensions
Adapted from the slides of Prof
Lecture: Pipelining Extensions
Pipelining and Exploiting Instruction-Level Parallelism (ILP)
CC423: Advanced Computer Architecture ILP: Part V – Multiple Issue
Pipelining and Exploiting Instruction-Level Parallelism (ILP)
Lecture 4: Advanced Pipelines
Pipelining and Exploiting Instruction-Level Parallelism (ILP)
Dynamic Hardware Prediction
Pipelining and Exploiting Instruction-Level Parallelism (ILP)
Pipelining and Exploiting Instruction-Level Parallelism (ILP)
Pipelining and Exploiting Instruction-Level Parallelism (ILP)
CPE 631 Lecture 14: Exploiting ILP with SW Approaches (2)
CMSC 611: Advanced Computer Architecture
Pipelining and Exploiting Instruction-Level Parallelism (ILP)
Lecture 5: Pipeline Wrap-up, Static ILP
Lecture: Pipelining Basics
Presentation transcript:

1 Lecture: Pipeline Wrap-Up and Static ILP Topics: multi-cycle instructions, precise exceptions, deep pipelines, compiler scheduling, loop unrolling, software pipelining (Sections C.5, 3.2)

2 Multicycle Instructions

3 Effects of Multicycle Instructions Potentially multiple writes to the register file in a cycle Frequent RAW hazards WAW hazards (WAR hazards not possible) Imprecise exceptions because of o-o-o instr completion Note: Can also increase the “width” of the processor: handle multiple instructions at the same time: for example, fetch two instructions, read registers for both, execute both, etc.

4 Precise Exceptions On an exception:  must save PC of instruction where program must resume  all instructions after that PC that might be in the pipeline must be converted to NOPs (other instructions continue to execute and may raise exceptions of their own)  temporary program state not in memory (in other words, registers) has to be stored in memory  potential problems if a later instruction has already modified memory or registers A processor that fulfils all the above conditions is said to provide precise exceptions (useful for debugging and of course, correctness)

5 Dealing with these Effects Multiple writes to the register file: increase the number of ports, stall one of the writers during ID, stall one of the writers during WB (the stall will propagate) WAW hazards: detect the hazard during ID and stall the later instruction Imprecise exceptions: buffer the results if they complete early or save more pipeline state so that you can return to exactly the same state that you left at

6 Slowdowns from Stalls Perfect pipelining with no hazards  an instruction completes every cycle (total cycles ~ num instructions)  speedup = increase in clock speed = num pipeline stages With hazards and stalls, some cycles (= stall time) go by during which no instruction completes, and then the stalled instruction completes Total cycles = number of instructions + stall cycles Slowdown because of stalls = 1/ (1 + stall cycles per instr)

7 Pipelining Limits ABC ABC ABCDEF ABCDEF Assume that there is a dependence where the final result of the first instruction is required before starting the second instruction Gap between indep instrs: T + T ovh Gap between dep instrs: T + T ovh Gap between indep instrs: T/3 + T ovh Gap between dep instrs: T + 3T ovh Gap between indep instrs: T/6 + T ovh Gap between dep instrs: T + 6T ovh

8 Problem 0 Assume an unpipelined processor where it takes 5ns to go through the circuits and 0.1ns for the latch overhead. What is the throughput for 20-stage and 40-stage pipelines? Assume that the P.O.P and P.O.C in the unpipelined processor are separated by 2ns. Assume that half the instructions do not introduce a data hazard and half the instructions depend on their preceding instruction.

9 Problem 0 Assume an unpipelined processor where it takes 5ns to go through the circuits and 0.1ns for the latch overhead. What is the throughput for 1-stage, 20-stage and 50-stage pipelines? Assume that the P.O.P and P.O.C in the unpipelined processor are separated by 2ns. Assume that half the instructions do not introduce a data hazard and half the instructions depend on their preceding instruction. 1-stage: 1 instr every 5.1ns 20-stage: first instr takes 0.35ns, the second takes 2.8ns 50-stage: first instr takes 0.2ns, the second takes 4ns

10 Static vs Dynamic Scheduling Arguments against dynamic scheduling:  requires complex structures to identify independent instructions (scoreboards, issue queue)  high power consumption  low clock speed  high design and verification effort  the compiler can “easily” compute instruction latencies and dependences – complex software is always preferred to complex hardware (?)

11 ILP Instruction-level parallelism: overlap among instructions: pipelining or multiple instruction execution What determines the degree of ILP?  dependences: property of the program  hazards: property of the pipeline

12 Loop Scheduling The compiler’s job is to minimize stalls Focus on loops: account for most cycles, relatively easy to analyze and optimize

13 Assumptions Load: 2-cycles (1 cycle stall for consumer) FP ALU: 4-cycles (3 cycle stall for consumer; 2 cycle stall if the consumer is a store) One branch delay slot Int ALU: 1-cycle (no stall for consumer, 1 cycle stall if the consumer is a branch) LD -> any : 1 stall FPALU -> any: 3 stalls FPALU -> ST : 2 stalls IntALU -> BR : 1 stall

14 Loop Example for (i=1000; i>0; i--) x[i] = x[i] + s; Loop: L.D F0, 0(R1) ; F0 = array element ADD.D F4, F0, F2 ; add scalar S.D F4, 0(R1) ; store result DADDUI R1, R1,# -8 ; decrement address pointer BNE R1, R2, Loop ; branch if R1 != R2 NOP Source code Assembly code

15 Loop Example for (i=1000; i>0; i--) x[i] = x[i] + s; Loop: L.D F0, 0(R1) ; F0 = array element ADD.D F4, F0, F2 ; add scalar S.D F4, 0(R1) ; store result DADDUI R1, R1,# -8 ; decrement address pointer BNE R1, R2, Loop ; branch if R1 != R2 NOP Source code Assembly code Loop: L.D F0, 0(R1) ; F0 = array element stall ADD.D F4, F0, F2 ; add scalar stall S.D F4, 0(R1) ; store result DADDUI R1, R1,# -8 ; decrement address pointer stall BNE R1, R2, Loop ; branch if R1 != R2 stall 10-cycle schedule LD -> any : 1 stall FPALU -> any: 3 stalls FPALU -> ST : 2 stalls IntALU -> BR : 1 stall

16 Smart Schedule By re-ordering instructions, it takes 6 cycles per iteration instead of 10 We were able to violate an anti-dependence easily because an immediate was involved Loop overhead (instrs that do book-keeping for the loop): 2 Actual work (the ld, add.d, and s.d): 3 instrs Can we somehow get execution time to be 3 cycles per iteration? Loop: L.D F0, 0(R1) stall ADD.D F4, F0, F2 stall S.D F4, 0(R1) DADDUI R1, R1,# -8 stall BNE R1, R2, Loop stall Loop: L.D F0, 0(R1) DADDUI R1, R1,# -8 ADD.D F4, F0, F2 stall BNE R1, R2, Loop S.D F4, 8(R1) LD -> any : 1 stall FPALU -> any: 3 stalls FPALU -> ST : 2 stalls IntALU -> BR : 1 stall

17 Problem 1 for (i=1000; i>0; i--) x[i] = y[i] * s; Loop: L.D F0, 0(R1) ; F0 = array element MUL.D F4, F0, F2 ; multiply scalar S.D F4, 0(R2) ; store result DADDUI R1, R1,# -8 ; decrement address pointer DADDUI R2, R2,#-8 ; decrement address pointer BNE R1, R3, Loop ; branch if R1 != R3 NOP Source code Assembly code LD -> any : 1 stall FPMUL -> any: 5 stalls FPMUL -> ST : 4 stalls IntALU -> BR : 1 stall How many cycles do the default and optimized schedules take?

18 Problem 1 for (i=1000; i>0; i--) x[i] = y[i] * s; Loop: L.D F0, 0(R1) ; F0 = array element MUL.D F4, F0, F2 ; multiply scalar S.D F4, 0(R2) ; store result DADDUI R1, R1,# -8 ; decrement address pointer DADDUI R2, R2,#-8 ; decrement address pointer BNE R1, R3, Loop ; branch if R1 != R3 NOP Source code Assembly code LD -> any : 1 stall FPMUL -> any: 5 stalls FPMUL -> ST : 4 stalls IntALU -> BR : 1 stall How many cycles do the default and optimized schedules take? Unoptimized: LD 1s MUL 4s SD DA DA BNE 1s cycles Optimized: LD DA MUL DA 2s BNE SD -- 8 cycles

19 Loop Unrolling Loop: L.D F0, 0(R1) ADD.D F4, F0, F2 S.D F4, 0(R1) L.D F6, -8(R1) ADD.D F8, F6, F2 S.D F8, -8(R1) L.D F10,-16(R1) ADD.D F12, F10, F2 S.D F12, -16(R1) L.D F14, -24(R1) ADD.D F16, F14, F2 S.D F16, -24(R1) DADDUI R1, R1, #-32 BNE R1,R2, Loop Loop overhead: 2 instrs; Work: 12 instrs How long will the above schedule take to complete?

20 Scheduled and Unrolled Loop Loop: L.D F0, 0(R1) L.D F6, -8(R1) L.D F10,-16(R1) L.D F14, -24(R1) ADD.D F4, F0, F2 ADD.D F8, F6, F2 ADD.D F12, F10, F2 ADD.D F16, F14, F2 S.D F4, 0(R1) S.D F8, -8(R1) DADDUI R1, R1, # -32 S.D F12, 16(R1) BNE R1,R2, Loop S.D F16, 8(R1) Execution time: 14 cycles or 3.5 cycles per original iteration LD -> any : 1 stall FPALU -> any: 3 stalls FPALU -> ST : 2 stalls IntALU -> BR : 1 stall

21 Loop Unrolling Increases program size Requires more registers To unroll an n-iteration loop by degree k, we will need (n/k) iterations of the larger loop, followed by (n mod k) iterations of the original loop

22 Automating Loop Unrolling Determine the dependences across iterations: in the example, we knew that loads and stores in different iterations did not conflict and could be re-ordered Determine if unrolling will help – possible only if iterations are independent Determine address offsets for different loads/stores Dependency analysis to schedule code without introducing hazards; eliminate name dependences by using additional registers

23 Problem 2 for (i=1000; i>0; i--) x[i] = y[i] * s; Loop: L.D F0, 0(R1) ; F0 = array element MUL.D F4, F0, F2 ; multiply scalar S.D F4, 0(R2) ; store result DADDUI R1, R1,# -8 ; decrement address pointer DADDUI R2, R2,#-8 ; decrement address pointer BNE R1, R3, Loop ; branch if R1 != R3 NOP Source code Assembly code LD -> any : 1 stall FPMUL -> any: 5 stalls FPMUL -> ST : 4 stalls IntALU -> BR : 1 stall How many unrolls does it take to avoid stall cycles?

24 Problem 2 for (i=1000; i>0; i--) x[i] = y[i] * s; Loop: L.D F0, 0(R1) ; F0 = array element MUL.D F4, F0, F2 ; multiply scalar S.D F4, 0(R2) ; store result DADDUI R1, R1,# -8 ; decrement address pointer DADDUI R2, R2,#-8 ; decrement address pointer BNE R1, R3, Loop ; branch if R1 != R3 NOP Source code Assembly code LD -> any : 1 stall FPMUL -> any: 5 stalls FPMUL -> ST : 4 stalls IntALU -> BR : 1 stall How many unrolls does it take to avoid stall cycles? Degree 2: LD LD MUL MUL DA DA 1s SD BNE SD Degree 3: LD LD LD MUL MUL MUL DA DA SD SD BNE SD – 12 cyc/3 iterations

25 Superscalar Pipelines Integer pipeline FP pipeline Handles L.D, S.D, ADDUI, BNE Handles ADD.D What is the schedule with an unroll degree of 4?

26 Superscalar Pipelines Integer pipeline FP pipeline Loop: L.D F0,0(R1) L.D F6,-8(R1) L.D F10,-16(R1) ADD.D F4,F0,F2 L.D F14,-24(R1) ADD.D F8,F6,F2 L.D F18,-32(R1) ADD.D F12,F10,F2 S.D F4,0(R1) ADD.D F16,F14,F2 S.D F8,-8(R1) ADD.D F20,F18,F2 S.D F12,-16(R1) DADDUI R1,R1,# -40 S.D F16,16(R1) BNE R1,R2,Loop S.D F20,8(R1) Need unroll by degree 5 to eliminate stalls The compiler may specify instructions that can be issued as one packet The compiler may specify a fixed number of instructions in each packet: Very Large Instruction Word (VLIW)

27 Problem 3 for (i=1000; i>0; i--) x[i] = y[i] * s; Loop: L.D F0, 0(R1) ; F0 = array element MUL.D F4, F0, F2 ; multiply scalar S.D F4, 0(R2) ; store result DADDUI R1, R1,# -8 ; decrement address pointer DADDUI R2, R2,#-8 ; decrement address pointer BNE R1, R3, Loop ; branch if R1 != R3 NOP Source code Assembly code LD -> any : 1 stall FPMUL -> any: 5 stalls FPMUL -> ST : 4 stalls IntALU -> BR : 1 stall How many unrolls does it take to avoid stalls in the superscalar pipeline?

28 Problem 3 for (i=1000; i>0; i--) x[i] = y[i] * s; Loop: L.D F0, 0(R1) ; F0 = array element MUL.D F4, F0, F2 ; multiply scalar S.D F4, 0(R2) ; store result DADDUI R1, R1,# -8 ; decrement address pointer DADDUI R2, R2,#-8 ; decrement address pointer BNE R1, R3, Loop ; branch if R1 != R3 NOP Source code Assembly code LD -> any : 1 stall FPMUL -> any: 5 stalls FPMUL -> ST : 4 stalls IntALU -> BR : 1 stall How many unrolls does it take to avoid stalls in the superscalar pipeline? LD LD MUL LD MUL 7 unrolls. Could also make do with 5 if we LD MUL moved up the DADDUIs. LD MUL SD MUL

29 Software Pipeline?! L.DADD.DS.D DADDUIBNE L.DADD.DS.D L.DADD.DS.D L.DADD.DS.D L.DADD.D L.DADD.D DADDUIBNE DADDUIBNE DADDUIBNE DADDUIBNE DADDUIBNE … … Loop: L.D F0, 0(R1) ADD.D F4, F0, F2 S.D F4, 0(R1) DADDUI R1, R1,# -8 BNE R1, R2, Loop

30 Software Pipeline L.DADD.DS.D L.DADD.DS.D L.DADD.DS.D L.DADD.DS.D L.DADD.DS.D L.DADD.DS.D L.DADD.D L.D Original iter 1 Original iter 2 Original iter 3 Original iter 4 New iter 1 New iter 2 New iter 3 New iter 4

31 Software Pipelining Loop: L.D F0, 0(R1) ADD.D F4, F0, F2 S.D F4, 0(R1) DADDUI R1, R1,# -8 BNE R1, R2, Loop Loop: S.D F4, 16(R1) ADD.D F4, F0, F2 L.D F0, 0(R1) DADDUI R1, R1,# -8 BNE R1, R2, Loop Advantages: achieves nearly the same effect as loop unrolling, but without the code expansion – an unrolled loop may have inefficiencies at the start and end of each iteration, while a sw-pipelined loop is almost always in steady state – a sw-pipelined loop can also be unrolled to reduce loop overhead Disadvantages: does not reduce loop overhead, may require more registers

32 Problem 4 for (i=1000; i>0; i--) x[i] = y[i] * s; Loop: L.D F0, 0(R1) ; F0 = array element MUL.D F4, F0, F2 ; multiply scalar S.D F4, 0(R2) ; store result DADDUI R1, R1,# -8 ; decrement address pointer DADDUI R2, R2,#-8 ; decrement address pointer BNE R1, R3, Loop ; branch if R1 != R3 NOP Source code Assembly code LD -> any : 1 stall FPMUL -> any: 5 stalls FPMUL -> ST : 4 stalls IntALU -> BR : 1 stall Show the SW pipelined version of the code and does it cause stalls?

33 Problem 4 for (i=1000; i>0; i--) x[i] = y[i] * s; Loop: L.D F0, 0(R1) ; F0 = array element MUL.D F4, F0, F2 ; multiply scalar S.D F4, 0(R2) ; store result DADDUI R1, R1,# -8 ; decrement address pointer DADDUI R2, R2,#-8 ; decrement address pointer BNE R1, R3, Loop ; branch if R1 != R3 NOP Source code Assembly code LD -> any : 1 stall FPMUL -> any: 5 stalls FPMUL -> ST : 4 stalls IntALU -> BR : 1 stall Show the SW pipelined version of the code and does it cause stalls? Loop: S.D F4, 0(R2) MUL F4, F0, F2 L.D F0, 0(R1) DADDUI R2, R2, #-8 BNE R1, R3, Loop DADDUI R1, R1, #-8 There will be no stalls

34 Title Bullet