Pipelining: Basics and data hazards

Download Report

Transcript Pipelining: Basics and data hazards

‫ מסלול נתונים של מחזור יחיד‬:‫תזכורת‬
PCSrc
Add
ALU
Add result
4
Shift
left 2
RegWrite
Instruction [25– 21]
PC
Read
address
Instruction
[31– 0]
Instruction
memory
Instruction [20– 16]
0
M
u
Instruction [15– 11] x
1
RegDst
Instruction [15– 0]
Read
register 1
Read
register 2
Read
data 1
MemWrite
ALUSrc
Read
Write
data 2
register
Write
Registers
data
16
Sign
extend
1
M
u
x
0
0
M
u
x
1
Zero
ALU ALU
result
MemtoReg
Address
Write
data
32
ALU
control
Read
data
1
M
u
x
0
Data
memory
MemRead
Instruction [5– 0]
ALUOp
December 2013
1
‫ מחזורים במחשב מרובה מחזורים‬:‫תזכורת‬
Instruction fetch
IF .1
Instruction decode + Register file read
ID .2
Execute / Address calculation
EX .3
Memory access
MEM .4
Write back
WB .5
‫ננסה להבחין בשלבים אלו גם במסלול הנתונים של‬
:‫מחזור יחיד‬
December 2013
•
2
‫מסלול נתונים מחולק לשלבים‬
IF: Instruction fetch
ID: Instruction decode/
register file read
0
M
u
x
1
EX: Execute/
address calculation
MEM: Memory access
WB: Write back
! ‫לשתי המטרות‬
Add
4
Add
Add
result
Shift
left 2
PC
Read
register 1
Address
Instruction
Instruction
memory
Read
data 1
Read
register 2
Registers Read
Write
data 2
register
Write
data
0
M
u
x
1
Zero
ALU ALU
result
Address
Data
memory
Write
data
16
December 2013
Sign
extend
Read
data
1
M
u
x
0
32
3
‫‪Pipelining‬‬
‫• חלוקת מסלול הנתונים לחמישה שלבים הופכת אותו‬
‫למחשב מרובה מחזורים‬
‫– ‪CPI=5‬‬
‫– רק פקודה אחת מתבצעת בכל רגע‬
‫– רק שלב אחד מתוך חמישה פעיל — בזבוז !!‬
‫• האם ניתן להפעיל את כל חמשת השלבים בו זמנית?‬
‫– כן! ‪ Pipeline‬של חמש פקודות שונות המתבצעות בו זמנית‬
‫‪4‬‬
‫‪December 2013‬‬
Pipeline -‫ביצוע פקודה בודדת וביצוע ב‬
Program
execution
Time
order
(in instructions)
lw $1, 100($0)
2
Instruction
Reg
fetch
lw $2, 200($0)
4
6
8
ALU
Data
access
10
12
16
18
Single cycle
Reg
Instruction
Reg
fetch
8 ns
14
lw $3, 300($0)
Data
access
ALU
Reg
Instruction
fetch
8 ns
...
8 ns
Program
2
execution
Time
order
(in instructions)
Instruction
lw $1, 100($0)
fetch
lw $2, 200($0)
2 ns
lw $3, 300($0)
4
Reg
Instruction
fetch
2 ns
6
ALU
Reg
Instruction
fetch
2 ns
December 2013
8
Data
access
ALU
Reg
2 ns
10
Reg
Data
access
14
12
Pipelined multi cycle
Reg
ALU
Data
access
2 ns
2 ns
Reg
2 ns
5
‫השהייה ו‪CPI-‬‬
‫• ביצוע פקודה בודדת‪:‬‬
‫– זמן המחזור נקבע לפי הפקודה האיטית ביותר (‪ 8ns‬בפקודת ‪)lw‬‬
‫– השהייה = מחזור אחד = ‪8ns‬‬
‫– ‪CPI=1‬‬
‫– תדר שעון מקסימלי = ‪125 MHz = 1/8ns‬‬
‫• ביצוע ‪:Pipeline‬‬
‫– זמן המחזור נקבע לפי השלב האיטי ביותר (‪)2ns‬‬
‫– השהייה = עומק ה‪ 5 = pipeline-‬מחזורים = ‪10ns‬‬
‫– ‪( CPI=1‬מדוע?)‬
‫– תדר שעון מכסימלי = ‪500MHz = 1/2ns‬‬
‫‪6‬‬
‫‪December 2013‬‬
Pipeline-‫ביצוע פקודות ב‬
Time (in clock cycles)
Program
execution
order
(in instructions)
lw $1, 100($0)
CC 1
CC 2
IM
Reg
lw $2, 200($0)
lw $3, 300($0)
December 2013
IM
CC 3
ALU
Reg
IM
CC 4
CC 5
DM
Reg
ALU
Reg
DM
ALU
CC 6
CC 7
Reg
DM
Reg
7
Pipeline ‫ כולל רגיסטרי‬,‫מסלול הנתונים‬
0
M
u
x
1
IF/ID
ID/EX
EX/MEM
MEM/WB
Add
Add
Add result
4
PC
1
Instruction
Shift
left 2
Address
Instruction
memory
Read
register 1
Read
data 1
Read
register 2
Registers Read
Write
data 2
register
0
M
u
x
1
Write
data
1
2
December 2013
Zero
ALU ALU
result
Address
Read
data
1
M
u
x
0
Data
memory
Write
data
16
Sign
extend
32
1
3
4
5
8
LW
December 2013
‫ של פקודת‬Fetch ‫שלב‬
9
LW
December 2013
‫ של פקודת‬Decode ‫שלב‬
10
LW
December 2013
‫ של פקודת‬Execute ‫שלב‬
11
LW
December 2013
‫ של פקודת‬Memory ‫שלב‬
12
LW
‫ של פקודת‬Write-Back ‫שלב‬
problem!
December 2013
13
‫הצצה על בקרת ה‪Pipeline-‬‬
‫• בעיה‪ :‬עד שמגיעים לשלב ‪ write-back‬של ‪LW‬‬
‫(שלושה מחזורים לאחר פענוח הפקודה)‪ ,‬כבר נעלם‬
‫מספר הרגיסטר (‪ )rt/rd‬ולא נזכור לאן לכתוב את‬
‫התוצאה‪...‬‬
‫• פתרון‪:‬‬
‫– נשלח את מספר הרגיסטר (‪ )rt/rd‬במורד ה‪ pipeline-‬יחד‬
‫עם הנתונים!‬
‫– המילה לטעינה לרגיסטר ומספר הרגיסטר יגיעו יחד ל‪-‬‬
‫‪Register File‬‬
‫• בעצם זו רק דוגמה — הבעיה והפתרון מתאימים לכל‬
‫אותות הבקרה‬
‫‪14‬‬
‫‪December 2013‬‬
rt/rd ‫מסלול נתונים מתוקן — כולל העברת‬
0
M
u
x
1
IF/ID
ID/EX
EX/MEM
MEM/WB
Add
4
Add
Add
result
PC
Address
Instruction
memory
Instruction
Shift
left 2
Read
register 1
Read
data 1
Read
register 2
Registers Read
Write
data 2
register
Write
data
Zero
0
M
u
x
1
ALU
ALU
result
Address
Read
data
1
M
u
x
0
Data
memory
Write
data
16
December 2013
Sign
extend
32
15
‫שלב ‪ IF‬של פקודת ‪ LW‬שאחריה‬
‫‪16‬‬
‫פקודת ‪SUB‬‬
‫‪December 2013‬‬
SUB (IF)
December 2013
‫ במקביל עם‬LW ‫ של‬ID ‫שלב‬
17
SUB (ID)
December 2013
‫ במקביל עם‬LW ‫ של‬EX ‫שלב‬
18
SUB (EX)
December 2013
‫ במקביל עם‬LW ‫ של‬MEM ‫שלב‬
19
SUB (MEM)
December 2013
‫ במקביל עם‬LW ‫ של‬WB ‫שלב‬
20
SUB (WB)
,‫ לאחר סיום‬LW
R-type instruction takes 5 cycles!
December 2013
21
‫בקר ל‪Pipelined MIPS-‬‬
‫• כל אותות הבקרה מועברים ב‪ ,pipeline-‬ממש כמו הנתונים‬
‫• בקרת הכתיבה ברגיסטרים (לשלב ‪ )WB‬לא באמת מועברת‬
‫חזרה‪:‬‬
‫– כניסת הכתיבה לרגיסטרים בעצם שייכת לשלב הסופי ב‪pipeline-‬‬
‫‪22‬‬
‫‪December 2013‬‬
pipeline-‫הוספת אותות בקרה ל‬
WB
Instruction
Control
IF/ID
December 2013
M
WB
EX
M
WB
ID/EX
EX/MEM
MEM/WB
23
‫ הבקרה‬+ ‫מסלול הנתונים‬
PCSrc
ID/EX
0
M
u
x
1
WB
Control
IF/ID
EX/MEM
M
WB
EX
M
MEM/WB
WB
Add
ALUSrc
Read
register 1
Read
data 1
Read
register 2
Registers Read
Write
data 2
register
Write
data
Zero
ALU ALU
result
0
M
u
x
1
MemtoReg
Instruction
memory
Branch
Shift
left 2
MemWrite
Address
Instruction
PC
Add
Add result
RegWrite
4
Address
Data
memory
Read
data
Write
data
Instruction 16
[15– 0]
Instruction
[20– 16]
Instruction
[15– 11]
Sign
extend
32
6
ALU
control
0
M
u
x
1
1
M
u
x
0
MemRead
ALUOp
RegDst
December 2013
24