Pipelining: Basics and data hazards
Download
Report
Transcript Pipelining: Basics and data hazards
Data Hazards
• Data Hazard
– פקודה אחת ( )R-Typeמייצרת נתון חדש וכותבת אותו
לרגיסטר
– הפקודה הבאה בתור רוצה להשתמש באותו נתון
– אבל הוא לא באמת מוכן עדיין
1
December 2013
Data Hazards -דוגמה ל
Time (in clock cycles)
CC 1
Value of
register $2: 10
Program
execution
order
(in instructions)
sub $2, $1, $3
IM
and $12, $2, $5
or $13, $6, $2
add $14, $2, $2
sw $15, 100($2)
December 2013
CC 2
CC 3
CC 4
CC 5
CC 6
CC 7
CC 8
CC 9
10
10
10
10/– 20
– 20
– 20
– 20
– 20
DM
Reg
Reg
IM
DM
Reg
IM
DM
Reg
IM
Reg
DM
Reg
IM
Reg
Reg
Reg
DM
Reg
2
פתרון אפשרי לData Hazards -
• Data hazardsיכולים לקרות אם מנסים להשתמש
בתוצאה לפני שהיא מוכנה ברגיסטר
• אבל היא כבר קיימת! ננסה לתפוס אותה בדרכה
לרגיסטר
• המנגנון קרוי Forwardingאו עקיפה ()bypass
3
December 2013
) מסלולים שונים3( עקיפה
Time (in clock cycles)
CC 1
Value of register $2 : 10
Value of EX/MEM : X
Value of MEM/WB : X
CC 2
CC 3
CC 4
CC 5
CC 6
CC 7
CC 8
CC 9
10
X
X
10
X
X
10
– 20
X
10/– 20
X
– 20
– 20
X
X
– 20
X
X
– 20
X
X
– 20
X
X
DM
Reg
Program
execution order
(in instructions)
sub $2, $1, $3
IM
and $12, $2, $5
or $13, $6, $2
add $14, $2, $2
sw $15, 100($2)
December 2013
Reg
IM
Reg
IM
DM
Reg
IM
Reg
DM
Reg
IM
Reg
DM
Reg
Reg
DM
Reg
4
Forwarding Unit Checks for:
• Are we reading from a register that has not
yet been updated? - If we are, then:
– The value to be forwarded may be from the
EX/MEM pipeline register output (in MEM stage)
or the MEM/WB output (in WB stage).
– RegWrite control signal shows if we are writing to
a register.
– We must forward for both rs and rt register reads.
– Writes to register zero must not be forwarded!
• Register zero always contains a zero, even if forwarded.
– If we can forward from both EX/MEM and
MEM/WB, select the newest value, the one from
EX/MEM.
December 2013
5
Designing the Forwarding Unit
• Detect hazard conditions:
• 1a) EX/MEM.Rd = ID/EX.Rs
• 1b) EX/MEM.Rd = ID/EX.Rt
• 2a) MEM/WB.Rd = ID/EX.Rs
• 2b) MEM/WB.Rd = ID/EX.Rt
– (also check for RegWrite, zero, and
newest)
• Use these checks to control the
forwarding multiplexers
December 2013
6
Execute עקיפה בשלב
ID/EX
Forwarding MUXes
WB
PC
Instruction
memory
WB
EX
M
MEM/WB
WB
RegWrite
Instruction
IF/ID
M
RegWrite
Control
EX/MEM
M
u
x
Registers
ALU
Data
memory
M
u
x
M
u
x
IF/ID.RegisterRs
Rs
IF/ID.RegisterRt
Rt
IF/ID.RegisterRt
Rt
IF/ID.RegisterRd
Rd
M
u
x
EX/MEM.RegisterRd
Forwarding
unit
MEM/WB.RegisterRd
Forwarding Logic
December 2013
7
Load Hazards
• סוג נוסף של בעיה ,דומה לData Hazard -
• אחרי ,LWהמילה שנטענה מהזיכרון לרגיסטר
עדיין לא מוכנה מיד...
• אין ברירה אלא להמתין .אפשר להכניס NOP
לקוד אחרי LW
– מדוע DATA HAZARDלא היה צורך ב NOP
וכאן צריך?
– ההמתנה מתחייבת משום שלוקח שני מחזורי שעון
עד שהמילה נקראת מהזיכרון ומתייצבת באוגר
MEM/WB
8
December 2013
Load Hazards
2
Time
4
6
8
10
12
bubble
14
Program
execution
order
(in instructions)
lw $s0, 20($t1)
sub $t2, $s0, $t3
December 2013
IF
ID
EX
MEM
WB
bubble
bubble
bubble
bubble
IF
ID
EX
MEM
WB
9
The nop (no operation) Instruction
• In MIPS the nop instruction is a machine
instruction where all 32 bits are zero.
• Actually, that is:
– An R-type instruction (op-code 0):
– A sll instruction (func-code 0):
– sll $0, $0, 0
• I.e. Shift register zero left zero times and
store the result in register zero.
– This does not change register zero, which is
always zero anyway(!)
December 2013
10
Inserting Bubbles by the Hardware
• Load Hazards can also be detected using a “hazard
detection unit” in the Decode stage.
• The hazard detection unit should stall the pipeline for
one cycle, creating an effect similar to a nop
instruction inserted by the programmer.
• This can be done by inserting a “bubble” to simulate
the nop instruction.
• Setting all control signals to 0 will have the same
effect as a nop.
• We must also hold the values in the PC and IF/ID
registers for one cycle! (by using clock enable).
December 2013
11
Inserting Bubbles in Hardware
Load hazard requires one NOP
Program
Time (in clock cycles)
execution
CC 1
CC 2
order
(in instructions)
lw $2, 20($1)
IM
and $4, $2, $5
or $8, $2, $6
add $9, $4, $2
slt $1, $6, $7
December 2013
CC 3
Reg
IM
Reg
IM
Bubble
CC 4
CC 5
DM
Reg
Reg
IM
CC 7
CC 8
CC 9
CC 10
Clock was stopped to IF/ID
DM
Reg
IM
CC 6
Reg
DM
DM
Reg
IM
Reg
Reg
Reg
Reg
DM
12
Inserting Bubbles in Hardware
Data can be taken from Reg-File, NOP is not required
Program
Time (in clock cycles)
execution
CC 1
CC 2
order
(in instructions)
lw $2, 20($1)
IM
and $4, $2, $5
or $8, $2, $6
add $9, $4, $2
slt $1, $6, $7
December 2013
CC 3
Reg
IM
Reg
IM
Bubble
CC 4
CC 5
DM
Reg
Reg
IM
CC 7
CC 8
CC 9
CC 10
Clock was stopped to PC
DM
Reg
IM
CC 6
Reg
DM
DM
Reg
IM
Reg
Reg
Reg
Reg
DM
13
Inserting Bubbles in Hardware
Program
Time (in clock cycles)
execution
CC 1
CC 2
order
(in instructions)
lw $2, 20($1)
IM
and $4, $2, $5
or $8, $2, $6
add $9, $4, $2
slt $1, $6, $7
December 2013
CC 3
Reg
IM
Reg
IM
Bubble
CC 4
CC 5
DM
Reg
Reg
IM
CC 6
CC 7
DM
Reg
Reg
IM
DM
Reg
CC 9
CC 10
Another forwarding
Reg
DM
Reg
IM
CC 8
Reg
Reg
DM
14
Bubble Insertion Hardware
Load hazard detection logic
Clock disable
IF/IDWrite
Hazard
detection
unit
ID/EX
Stall
WB
Control
0
M
u
x
Instruction
memory
Instruction
PCWrite
IF/ID
PC
Compare Reg # and
check for memory read
ID/EX.MemRead
EX/MEM
M
WB
EX
M
MEM/WB
WB
M
u
x
Registers
ALU
Data
memory
M
u
x
M
u
x
IF/ID.RegisterRs
December 2013
IF/ID.RegisterRt
IF/ID.RegisterRt
Rt
IF/ID.RegisterRd
Rd
ID/EX.RegisterRt
Rs
Rt
M
u
x
EX/MEM.RegisterRd
Forwarding
unit
MEM/WB.RegisterRd
15
Example: Load is Decoded (1/4)
December 2013
16
Example: Load Hazard is Detected (2/4)
December 2013
17
Example: Bubble Inserted (3/4)
December 2013
18
Example: Data Gets Forwarded (4/4)
December 2013
19
Control Hazards
• עד כה ראינו:
– Data hazards
– Load hazard
• בעיה שלישיתControl Hazard :
• קפיצה מותנית קורית בשלב רביעי ב.pipe -
• עד שמגיעים אליה נכנסו כבר 3פקודות עוקבות נוספות
– לשלבי IF ,ID ,EXE
• אם קופצים ,יש להשמיד את 3הפקודות שנכנסו בטעות !
20
December 2013
) הבקרה (תזכורת+ מסלול הנתונים
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
21
Control Hazards
Time (in clock cycles)
Program
execution
CC 1
CC 2
order
(in instructions)
CC 3
CC 4
CC 5
DM
Reg
CC 6
CC 7
CC 8
CC 9
28
40 beq $1, $3, 7
44 and $12, $2, $5
48 or $13, $6, $2
52 add $14, $2, $2
72 lw $4, 50($7)
IM
Reg
IM
Reg
IM
DM
Reg
IM
Reg
DM
Reg
IM
DM
Reg
corruption
Reg
Reg
DM
Reg
40+4+28=72
December 2013
22
פתרון ראשוןNOP+NOP+NOP :
• אחרי פקודת קפיצה מותנית נכניס 3פעמים
NOP
• לא משנה אם קופצים או לא ,לא יגרם נזק
• הפתרון הראשון לא יעיל:
– בד"כ 20%מהפקודות הן קפיצה
– לולאה טיפוסית 4 :פקודות רגילות +קפיצה
– במקום 5מחזורים ,תימשך 8מחזורים (תוספת 3
)NOP
– ירידה של 60%בביצועים...
23
December 2013
פתרון שניUseful delay slots :
• אולי אפשר להעביר 3פקודות מלפני BEQלאחריו?
• דוגמה:
?data hazard
$t0,$t0,$t1
$t0,$zero,loop
$s0,$s1,$s2
$v0,$v1,$v0
$t2,$t3,$t4
sub
bne
add
add
xor
loop:
$t0,$t0,$t1
$s0,$s1,$s2
$v0,$v1,$v0
$t2,$t3,$t4
$t0,$zero,loop
sub
add
add
xor
bne
nop X 3
loop:
• בין אם תתבצע הקפיצה ובין אם לא ,שלוש הפקודות בצבע
צריכות להתבצע
• פתרון לא קל :קשה מאוד למצוא תמיד 3פקודות יעילות
שאפשר להעביר לאחר ה( Branch-אסור למשל שישפיעו על
החלטת הקפיצה) .אם לא ,נוסיף NOPכמו בפתרון הראשון
• הערה :יש פתרונות טובים יותר ! נראה בהמשך
24
December 2013
פתרון שלישיFlush on Taken :
• נשתמש בקוד המקורי ללא שינוי .אם לא תהיה קפיצה
( )Not Takeנמשיך כרגיל .אם תהיה קפיצה ,נשמיד
שלוש פקודות
• ריקון הצינור ()flush the pipe
– בדיוק כמו במקרה של :Load Hazardנאפס את קווי
הבקרה
• הביצועים:
– אם לא תהיה קפיצה ,פקודה לכל מחזור שעון ()CPI=1
– אם תהיה קפיצה ,כמו במקרה של :NOP×3תוספת 3
מחזורי סרק ,ירידת ביצועים עד 60%
25
December 2013
EXE לשלבBR העברת:פתרון רביעי
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
1
M
u
x
0
Write
data
Instruction 16
[15– 0]
Instruction
[20– 16]
Instruction
[15– 11]
Sign
extend
32
6
ALU
control
0
M
u
x
1
MemRead
ALUOp
RegDst
December 2013
26
פתרון רביעי :העברת BRלשלב EXE
• פשוט (אין שינוי משמעותי בתכנון)
• מספר הפקודות שעלולות להיזרק ירד מ 3-ל2-
• הפגיעה המרבית בביצועים ירדה ל40% -
• האם ניתן להמשיך ולהעביר את ה Branch-עוד
יותר מוקדם?
כן!
27
December 2013
ID לשלבBR העברת:פתרון חמישי
IF.Flush
Hazard
detection
unit
ID/EX
M
u
x
WB
Control
0
M
u
x
IF/ID
4
M
WB
EX
M
MEM/WB
WB
Shift
left 2
Registers
PC
EX/MEM
=
M
u
x
Instruction
memory
ALU
Data
memory
M
u
x
M
u
x
Sign
extend
M
u
x
Forwarding
unit
December 2013
28
פתרון חמישי :העברת BRלשלב ID
• אין ALUבשלב IDואין כיצד לבצע השוואה (חיסור)
• נוסיף משווה פשוט (מבוסס שערי )XOR
• נוסיף עוד יחידת FORWARDכדי שההשוואה
…
תתבצע בין נתונים "טריים"
sub
bne
$t0,$t0,$t1
$t0,$zero,loop
• STALLעשוי עדיין להיות דרוש
חישוב כתובת הקפיצה נעשה לכל פקודה! מדוע?
חישוב כתובת הקפיצה נעשה כבר בשלב ה .ID
29
December 2013
Flushing Instructions
IF.Flush
Hazard
detection
unit
ID/EX
M
u
x
WB
Control
0
M
u
x
IF/ID
4
M
WB
EX
M
MEM/WB
WB
Shift
left 2
Registers
PC
EX/MEM
=
M
u
x
Instruction
memory
ALU
Data
memory
M
u
x
M
u
x
Sign
extend
Forwarding
unit
M
u
x
Forwarding
unit
December 2013
30
פתרון שישיSingle Delay Slot :
• נחזור לפתרון השני ,אבל עם delay slotאחד בלבד
• אפשרי ,כי כבר העברנו את ה branch-לשלב ID
• אין צורך בריקון ,הפקודה אחרי branchמתבצעת
תמיד
– פקודה מועילה ,אם המתכנת /הקומפיילר הצליחו
– פקודת NOPבמקרים אחרים
• אזהרה :אסור לערבב תכניות שנכתבו לפתרונות
החמישי והשישי .מדוע?
– כי מצאנו פקודה "מועילה" שצריכה להתבצע בכל מקרה ,גם
אם הלולאה מסתימת ,ובפתרון חמש היא תושמד.
31
December 2013
פתרון שביעי :החלטה דינמית
• ננחש (ע"פ ההיסטוריה) האם הקפיצה תתבצע או לא
• ע"פ הניחוש ,נביא את הפקודה הצפויה
– הפקודה הבאה אם ) ,NT (Not Takenיעד הקפיצה אם T
• אם הניחוש הצליח ,הרווחנו זמן
• אם הניחוש נכשל:
– נבצע Flushלפקודה שהובאה ונמשיך כרגיל
– נשקול לעדכן את הניחוש לפעם הבאה
• הסיפור המלא שייך לקורס "מבנה מחשבים ספרתיים"
32
December 2013
סיכום
• השימוש ב pipeline-אמור להאיץ את החישוב
• משלמים בחומרה ובהספק
• משלמים בסיבוך (תוכנה +חומרה) לטיפול ב-
hazards
33
December 2013