Chapter 10 Principles of Pipelining
Chapter 10 Principles of Pipelining
The
Processor
LanguageDesign
of Bits
Basic Computer Architecture
Prof. Smruti Ranjan Sarangi
IIT Delhi
1
2nd version
www.basiccomparch.com
Download the pdf of the book
videos
3
Up till now ….
* We have designed a processor that can
execute all the SimpleRisc Instructions
* We have look at two styles :
*
With a hardwired control unit
*
Microprogrammed control unit
* Microprogrammed data path
* Microassembly Language
* Microinstructions
4
Designing Efficient Processors
5
The Notion of Pipelining
* Let us go back to the car assembly line
* Is the engine shop idle, when the paint shop is
painting a car ?
* NO : It is building the engine of another car
* When this engine goes to the body shop, it
builds the engine of another car, and so on ….
* Insight :
* Multiple cars are built at the same time.
* A car proceeds from one stage to the next
6
Pipelined Processors
inst 5 inst 4 inst 3 inst 2 inst 1
8
Design of a Pipeline
* Splitting the Data Path
* We divide the data path into 5 parts : IF, OF, EX,
MA, and RW
* Timing
* We insert latches (registers) between
consecutive stages
* 4 Latches → IF-OF, OF-EX, EX-MA, and MA-RW
* At the negative edge of a clock, an instruction
moves from one stage to the next
9
Pipelined Data Path with Latches
Latches
10
The Instruction Packet
* What travels between stages ?
* ANSWER : the instruction packet
* Instruction Packet
* Instruction contents
* Program counter
* All intermediate results
* Control signals
* Every instruction moves with its entire state, no
interference between instructions
11
Outline
* Overview of Pipelining
* A Pipelined Data Path
* Pipeline Hazards
* Pipeline with Interlocks
* Forwarding
* Performance Metrics
* Interrupts/ Exceptions
12
IF Stage
instruction
13
OF Stage
instruction
Control
Immediate and unit
branch target
14
EX Stage
aluSignals
To fetch unit
flag
0 1 isBeq
Branch
isRet ALU unit isBgt
branchPC
s
?ags
isUBranch
isBranchTaken
15
MA Stage
pc aluResult op2 instruction control EX-MA
mdr
mar
isLd
Data memory Memory
unit
isSt
pc control MA-RW
ldResult aluResult instruction
16
RW Stage
4 isLd
10 01 00 isCall isWb
E
rd
0
Register
E enable A file
1
data ra(15) D
A address
D data
17
1
pc + 4 0
pc Instruction instruction
memory
pc instruction
1 0 1 0 isSt
isRet Control
reg
Immediate and Register unit
file data
branch target
op2 op1
isWb
immx isImmediate
1 0
aluSignals
flags
0 isBeq
1 Branch
isRet ALU unit
isBgt
isUBranch
isBranchTaken
pc aluResult op2 instruction control
isLd
mar mdr
Data
Memory
memory unit
isSt
DRAFT
pc ldResult aluResult instruction control
4 isLd
isWb
10 01 00 isCall
rd
0
C Smruti
data
R. Sarangi
ra(15)<srsarangi@cse.iitd.ac.in>
1
18
Abridged Diagram
Data
ALU
memory
op2 Unit
Instruction Register
memory file op1
19
Outline
* Overview of Pipelining
* A Pipelined Data Path
* Pipeline Hazards
* Pipeline with Interlocks
* Forwarding
* Performance Metrics
* Interrupts/ Exceptions
20
Pipeline Hazards
* Now, let us consider correctness
* Let us introduce a new tool → Pipeline
Diagram Clock cycles
1 2 3 4 5 6 7 8 9
IF 1 2 3
[1]: add r1, r2, r3 1 2 3
OF
[2]: sub r4, r5, r6 EX 1 2 3
MA 1 2 3
[3]: mul r8, r9, r10
RW 1 2 3
21
Rules for Constructing a Pipeline
Diagram
* It has 5 rows
* One per each stage
* The rows are named : IF, OF, EX, MA, and RW
* Each column represents a clock cycle
* Each cell represents the execution of an
instruction in a stage
* It is annotated with the name(label) of the
instruction
* Instructions proceed from one stage to
the next across clock cycles 22
Example
Clock cycles
1 2 3 4 5 6 7 8 9
IF 1 2 3
[1]: add r1, r2, r3 1 2
OF 3
[2]: sub r4, r2, r5 EX 1 2 3
MA 1 2 3
[3]: mul r5, r8, r9
RW 1 2 3
23
Data Hazards
clock cycles
1 2 3 4 5 6 7 8 9
IF 1 2
[1]: add r1, r2, r3
OF 1 2
24
Data Hazard
Definition: A hazard is defined as the possibility of erroneous execution of an
instruction in a pipeline. A data hazard represents the possibility of erroneous
execution because of the unavailability of data, or the availability of incorrect
data.
27
WAR Hazards
28
Control Hazards
29
Control Hazard – Pipeline
Diagram
Clock cycles
1 2 3 4 5 6 7 8 9
IF 1 2 3
[1]: beq .foo OF 1 2 3
[2]: mov r1, 4 EX 1 2 3
MA 1 2 3
[3]: add r2, r4, r3
RW 1 2 3
32
Structural Hazards - II
33
Solutions in Software
* Data hazards
* Insert nop instructions, reorder code
[1]: add r1, r2, r3
[2]: sub r3, r1, r4
34
Code Reordering
35
Control Hazards
* Trivial Solution : Add two nop
instructions after every branch
* Better solution :
* Assume that the two instructions fetched after a
branch are valid instructions
* These instructions are said to be in the delay
slots
* Such a branch is known as a delayed branch
36
Example with 2 Delay Slots
b .foo
add r1, r2, r3 add r1, r2, r3
add r4, r5, r6 add r4, r5, r6
b .foo add r8, r9, r10
add r8, r9, r10
37
Outline
Overview of Pipelining
A Pipelined Data Path
Pipeline Hazards
Pipeline with Interlocks
Forwarding
Performance Metrics
Interrupts/ Exceptions
38
Why interlocks ?
39
Two kinds of Interlocks
* Data-Lock
* Do not allow a consumer instruction to move
beyond the OF stage till it has read the
correct values. Implication : Stall the IF and
OF stages.
* Branch-Lock
* We never execute instructions in the wrong path.
* The hardware needs to ensure both
these conditions.
40
Comparison between Software and
Hardware
41
Conceptual Look at Pipeline with
Interlocks
42
Example
Clock cycles
bubble
1 2 3 4 5 6 7 8 9
IF 1 2
[1]: add r1, r2, r3
OF 1 2 2 2 2
MA 1 2
RW 1 2
43
A Pipeline Bubble
* A pipeline bubble is inserted into a stage,
when the previous stage needs to be
stalled
* It is a nop instruction
* To insert a bubble
* Create a nop instruction packet
* OR, Mark a designated bubble bit to 1
44
Bubbles in the Case of a Branch
Instruction
Clock cycles
bubble
1 2 3 4 5 6 7 8 9
[1]: beq. foo
[2]: add r1, r2, r3 IF 1 2 3 4
[3]: sub r4, r5, r6
OF 1 2 4
....
.... EX 1 4
.foo:
MA 1 4
[4]: add r8, r9, r10
RW 1 4
45
Control Hazards and Bubbles
46
Ensuring the Data-Lock Condition
47
Algorithm 5: Algorithm to detect conflicts between instructions
Data: instructions, [A], and [B]
Result: conflict exists (true), no conflict (false)
if [A].opcode ∈ (nop,b,beq,bgt,call) then
/* Does not read from any register */
return false
end
if [B].opcode ∈ (nop, cmp, st, b, beq, bgt, ret) then
/* Does not write to any register */
return false
end
/* Set the sources */
src1 ← [A].rs1
src2 ← [A].rs2
if [A].opcode = st then
src2 ← [A].rd
end
if [A].opcode = ret then
src1 ← ra
end
hasSrc1 ← true
if ([A] ∈ (not, mov)) hasSrc1 ← false
48
dest ← [B].rd
if [B].opcode = call then
dest ← ra
end
/* Check the second operand to see if it is a register */
hasSrc2 ← true
if [A].opcode ≠ ( st) then
if [A].I = 1 then
hasSrc2 ← false
end
end
/* Detect conflicts */ */
if (hasSrc1 = true) and (src1 = dest) then
return true
end
else if (hasSrc2 = true) and (src2 = dest) then
return true
end
return false
49
How to Stall a Pipeline ?
50
Data Path with Interlocks (Data-
Lock)
bubble
stall stall
Data-lock Unit
Control
unit Branch
unit Memory
unit
MA-RW
Register
EX-MA
Fetch
OF-EX
Immediate
unit
IF-OF and branch flags write unit
unit
Data
ALU
op2
memory
unit
Instruction Register
memory file op1
51
Ensuring the Branch-Lock Condition
* Option 1 :
* Use delay slots (interlocks not required)
* Option 2 :
* Convert the instructions in the IF, and OF stages,
to bubbles once a branch instruction reaches the
EX stage.
* Start fetching from the next PC (not taken) or the
branch target (taken)
52
Ensuring the Branch-Lock Condition
- II
* Option 3
* If the branch instruction in the EX stage is taken,
then invalidate the instructions in the IF and OF
stages. Start fetching from the branch target.
* Otherwise, do not take any special action
* This method is also called predict not-taken (we
shall use this method because it is more
efficient that option 2)
53
Data Path with Interlocks
isBranchTaken
Control
unit Branch
unit Memor
yunit
Fetch Immediate Register
IF-OF
MA-RW
OF-EX
and branch flags write unit
EX-MA
unit unit
Data
ALU
unit
memory
op2
Instruction Register
memory file op1
54
Outline
* Overview of Pipelining
* A Pipelined Data Path
* Pipeline Hazards
* Pipeline with Interlocks
* Forwarding
* Performance Metrics
* Interrupts/ Exceptions
55
Relook at the Pipeline Diagram
IF 1 2 1 2
1 2
MA 1 2
RW 1 2 1 2
(a) (b)
57
Forwarding
Clock cycles
1 2 3 4 5 6 7 8 9
IF 1 2
1 2
MA
RW 1 2
58
Forwarding from MA to EX
Clock cycles
1 2 3 4 5 6 7 8 9
IF 1 2
1 2
MA
RW 1 2
59
Different Forwarding Paths
60
Forwarding Path
* 3 Stage Paths
* RW → OF
* 2 Stage Paths
* RW → EX
* MA → OF (X Not Required)
* 1 Stage Paths
* RW → MA (load to store)
* MA → EX (ALU Instructions, load, store)
* EX → OF (X Not Required)
61
Forwarding Paths : RW →
MA
Clock cycles
1 2 3 4 5 6 7 8 9
IF 1 2
1 2
MA
RW 1 2
62
Forwarding Paths : RW → EX
Clock cycles
1 2 3 4 5 6 7 8 9
IF 1 2 3
1 2 3
MA
[3]: add r2, r1, r4
RW 1 2 3
63
Forwarding Path : MA → EX
Clock cycles
1 2 3 4 5 6 7 8 9
IF 1 2
[1]: add r1, r2, r3
OF 1 2
1 2
MA
RW 1 2
64
Forwarding Path : RW → OF
Clock cycles
1 2 3 4 5 6 7 8 9
IF 1 2 3 4
RW 1 2 3 4
65
Data Hazards with Forwarding
66
Load-Use Hazard
Clock cycles
1 2 3 4 5 6 7 8 9
IF 1 2
EX 1 2
[2]: sub r4, r1, r2
MA 1 2
RW 1 2
67
Implementation of Forwarding
68
OF Stage with Forwarding
IF-OF OF-EX
Control
unit
Immediate
and branch
unit
M2 B
M'
op2
Register op2
file op1
A
M1
from RW
69
EX Stage with Forwarding
to IF
OF-EX EX-MA
Branch
unit
M3 flags
A
ALU
M4 unit
B M5
op2
from MA
from RW
70
MA Stage with Forwarding
MA-RW
EX-MA
aluResult
Memory
op2 unit
M6
Data
memory
to EX
from RW
to EX and OF
71
RW Stage with Forwarding
MA-RW
Register
write unit
72
Data Path with Forwarding
MA-RW
IF-OF OF-EX EX-MA
Control
unit Branch Memory
unit unit
Register
Fetch Immediate
write unit
and branch flags
unit unit
Data
memory
ALU
op2
Instruction Register unit
memory file op1
op2
73
Forwarding Conditions
* Determine if there is a conflict
between two instructions in different
stages
* Find if there is a conflict for the first operand
(rs1/ ra)
* Find if there is a conflict for the second operand
(rs2/rd)
* Always forward from the latest
instruction (that is earlier than the
74
Algorithm 6: Conflict on the first operand (rs1/ra)
Data: instructions, [A], and [B] (possible forwarding: [B] → [A])
Result: conflict exists on rs1/ra (true), no conflict (false)
if [A].opcode ∈ (nop,b,beq,bgt,call,not,mov) then
/* Does not read from any register */
return false
end
if [B].opcode ∈ (nop, cmp, st, b, beq, bgt, ret) then
/* Does not write to any register */
return false
end
/* Set the sources */
src1 ← [A].rs1
if [A].opcode = ret then
src1 ← ra
end
/* Set the destination */
dest ← [B].rd
if [B].opcode = call then
dest ← ra
end
/* Detect conflicts */
if src1 = dest then
return true
end
return false
75
Algorithm 7: Conflict on the second operand (rs2/rd)
Data: instructions, [A], and [B] (possible forwarding: [B] → [A])
Result: conflict exists on second operand (rs2/rd) (true), no conflict
(false)
if [A].opcode ∈ (nop,b,beq,bgt,call) then
/* Does not read from any register */
return false
end
if [B].opcode ∈ (nop, cmp, st, b, beq, bgt, ret) then
/* Does not write to any register */
return false
end
/* Check the second operand to see if it is a register */
if [A].opcode ≠( st) then
if [A].I = 1 then
return false
end
end
/* Set the sources */
src2 ← [A].rs2
if [A].opcode = st then
src2 ← [A].rd
end
76
/* Set the destination */
dest ← [B].rd
if [B].opcode = call then
dest ← ra
end
/* Detect conflicts */
if src2 = dest then
return true
end
return false
77
Interlocks with Forwarding
* Data-Lock
* We need to only check for the load-use hazard
* If the instruction in the EX stage is a load, and the
instruction in the OF stage uses its loaded value,
then stall for 1 cycle
* Branch-Lock
* Remains the same as before.
78
The Curious Case of the
call instruction
Control
unit Branch Memory
unit unit
Register
Fetch Immediate
write unit
unit and branch flags
EX-MA
OF-EX
MA-RW
IF-OF
unit
Data
memory
Execute
op2
Instruction Register unit
memory file op1
op2
Forwarding unit
80
Outline
* Overview of Pipelining
* A Pipelined Data Path
* Pipeline Hazards
* Pipeline with Interlocks
* Forwarding
* Performance Metrics
* Interrupts/ Exceptions
81
Measuring Performance
* What do we mean by the performance of
a processor ?
* ANSWER : Almost nothing
* What should we ask instead ?
* What is the performance with respect to a given
program or a set of programs ?
* Performance is inversely proportional to the time it
takes to execute a program
82
Computing the Time a Program
Takes
𝜏=¿𝑠𝑒𝑐𝑜𝑛𝑑𝑠
* CPI → Cycles per instruction
* f → frequency (cycles per second)
83
The Performance Equation
𝐼𝑃𝐶 ∗ 𝑓
𝑃∝
¿ 𝑖𝑛𝑠𝑡𝑠
84
Number of Instructions (#insts)
𝑛+ 𝑘 − 1
𝐶𝑃𝐼 =
𝑛
87
Computing the Maximum Frequency
𝑡 𝑚𝑎𝑥
𝑡 𝑠𝑡𝑎𝑔𝑒 = +𝑙
𝑘
89
Performance of an Ideal Pipeline
𝑓
𝑃=
𝐶𝑃𝐼
90
Optimal Number of Pipeline Stages
𝜕¿¿
* k is inversely proportional to
* k is proportional to
91
Implications
* As we increase the latch delay, we should
have less pipeline stages
* We need to minimise the time wasted in accessing
latches
* As we increase the amount of algorithmic
work, we require more pipeline stages for
ideal performance
* More pipeline stages help distribute the work better,
and increase the overlap across instructions
92
Implications - II
93
A Non-Ideal Pipeline
94
Non-Ideal Pipeline - II
95
Mathematical Model
𝑓
𝑃=
𝐶𝑃𝐼
96
Mathematical Model - II
97
Implications
* For programs with a lot of
dependences (high value of r) → Use
less pipeline stages
* For a pipeline with forwarding → c is
smaller (than a pipeline that just has
interlocks)
* It requires a larger number of pipeline stages
for optimal performance
98
Implications
99
Example
Example Consider two programs that have the following characteristics.
Program 1 Program 2
Instruction Fraction Instruction Fraction
Type Type
100
Example
101
Performance, Architecture, Compiler
P f IPC
Technology Compiler
Architecture Architecture
102
Outline
* Overview of Pipelining
* A Pipelined Data Path
* Pipeline Hazards
* Pipeline with Interlocks
* Forwarding
* Performance Metrics
* Interrupts/ Exceptions
103
What happens when you press a
key ?
105
Precise Exceptions
* Informal definition
* We need to return to the original program at exactly
the same point, at which we had left it
* The execution of the interrupt handler should not
disrupt the execution of the original program in any
way. The outcome of the original program should be
independent of the interrupt (unless the program
caused an exception).
106
Precise Exceptions - II
* Formal Definition
* Let us number the dynamic instructions in a program :
I1 … In
* Let us assume that an instruction completes after it
either updates memory, writes to registers, or reaches
the MA stage (cmp, b, beq, bgt, ret)
* Let the last program instruction that completes before
the first instruction in the interrupt handler completes,
be Ik
* Let all the program instructions that complete before
the first instruction in the interrupt handler completes,
be C
107
Precise Exceptions - III
𝐼 𝑗 ∈ 𝐶 ⇔( 𝑗 ≤ 𝑘 )
108
Marking Instructions
* Program State
* PC
* Registers
* Flags
* Memory
* Memory → Assume that there is no overlap
of memory regions, unless explicitly
intended
111
oldPC Register
* Let us add a npc field in the instruction packet
* For taken branches it is equal to the branch target
* For all other instructions it is equal to (pc + 4)
* We populate the npc field in the EX stage
* Depending on the type of the exception, we might
want to return to pc or npc
* The exception unit sets the oldPC register to the right return
address
112
Spilling/ Restoring Registers
* Naive solution :
* Do not allow any instruction after the marked
instruction to update the flags register
* We detect an exception typically towards the
middle or end of a cycle
* By that time, the instruction might have already
updated the flags register (at least the master
latch)
114
Solution
oldSP 0010
flags 0011
oldFlags 0100
sp 1110
118
Assembly Code for Spilling Registers
119
Spilling Registers - II
st r13, -56[sp]
st r15, -60[sp]
120
Restoring Registers
/* update the stack pointer */
add sp, sp, 72
/* restore the oldPC register */
ld r0, -72[sp]
movz oldPC, r0
ld r9, -40[sp]
ld r10, -44[sp]
ld r11, -48[sp]
ld r12, -52[sp]
ld r13, -56[sp]
ld r15, -60[sp]
/* restore the stack pointer */
ld sp, -64[sp]
/* return to the program */
retz
122
PC of exception handler
isBranchTaken
bubble CPL
Branch-lock Unit
Exception unit
stall
(pc/npc), flags
Data-lock Unit
Control
unit Branch Memory
unit unit
Register
Fetch Immediate
write unit
unit
and branch flags
EX-MA
OF-EX
MA-RW
unit
IF-OF
Data
Register unit memory
ALU
op2
Instruction Register unit
memory file op1
op2
oldFlags
oldPC
oldSP
flags
Forwarding unit
123
THE END
124