Upload
ronni
View
27
Download
0
Embed Size (px)
DESCRIPTION
Data Hazards. Data Hazard פקודה אחת ( R-Type ) מייצרת נתון חדש וכותבת אותו לרגיסטר הפקודה הבאה בתור רוצה להשתמש באותו נתון אבל הוא לא באמת מוכן עדיין. December 2013. 1. דוגמה ל- Data Hazards. T. i. m. e. (. i. n. c. l. o. c. k. c. y. c. l. e. s. ). C. C. 7. C. C. 8. - PowerPoint PPT Presentation
Citation preview
Data Hazards
•Data Hazard
( מייצרת נתון חדש וכותבת אותו R-Typeפקודה אחת )–לרגיסטר
הפקודה הבאה בתור רוצה להשתמש באותו נתון–
אבל הוא לא באמת מוכן עדיין–
December 2013 1
sub $2, $1, $3
Programexecutionorder(in instructions)
and $12, $2, $5
or $13, $6, $2
add $14, $2, $2
sw $15, 100($2)
CC 1 CC 2 CC 3 CC 4 CC 5 CC 6
Time (in clock cycles)
CC 7 CC 8 CC 9
10 10 10 10 10/– 20 – 20 – 20 – 20 – 20Value of register $2:
Data Hazardsדוגמה ל-
Reg
Reg
IM Reg
IM Reg
IM Reg DM Reg
IM DM Reg
IM DM Reg
DM
Reg
Reg
DM
December 2013 2
Data Hazardsפתרון אפשרי ל-
•Data hazards יכולים לקרות אם מנסים להשתמש בתוצאה לפני שהיא מוכנה ברגיסטר
אבל היא כבר קיימת! ננסה לתפוס אותה בדרכה •לרגיסטר
(bypassאו עקיפה ) Forwardingהמנגנון קרוי •
December 2013 3
מסלולים שונים(3עקיפה )
IM Reg
IM Reg
CC 1 CC 2 CC 3 CC 4 CC 5 CC 6
Time )in clock cycles(
sub $2, $1, $3
Programexecution order)in instructions(
and $12, $2, $5
IM Reg DM Reg
IM DM Reg
IM DM Reg
CC 7 CC 8 CC 9
10 10 10 10 10/– 20 – 20 – 20 – 20 – 20
or $13, $6, $2
add $14, $2, $2
sw $15, 100)$2(
Value of register $2 :
DM Reg
Reg
Reg
Reg
X X X – 20 X X X X XValue of EX/MEM :X X X X – 20 X X X XValue of MEM/WB :
DM
December 2013 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עקיפה בשלב
PCInstruction
memory
Registers
Mux
Mux
Control
ALU
EX
M
WB
M
WB
WB
ID/EX
EX/MEM
MEM/WB
Datamemory
Mux
Forwardingunit
IF/ID
Inst
ruct
ion
Mux
RdEX/MEM.RegisterR
MEM/WB.Registe Rd
Rt
Rt
Rs
IF/ID.RegisterRd
IF/ID.RegisterRt
IF/ID.RegisterRt
IF/ID.RegisterRs
d
r
Reg
Wri
te
Forwarding MUXes
Forwarding Logic
Reg
Wri
teDecember 2013 7
Load Hazards
Data Hazardסוג נוסף של בעיה, דומה ל- •
, המילה שנטענה מהזיכרון LWאחרי •לרגיסטר עדיין לא מוכנה מיד...
אין ברירה אלא להמתין. אפשר להכניס •NOP לקוד אחרי LW
NOP לא היה צורך ב DATA HAZARDמדוע –וכאן צריך?
ההמתנה מתחייבת משום שלוקח שני מחזורי –שעון עד שהמילה נקראת מהזיכרון ומתייצבת
MEM/WBבאוגר December 2013 8
Load Hazards
Time2 4 6 8 10 12 14
lw $s0, 20)$t1(
sub $t2, $s0, $t3
Programexecutionorder)in instructions(
IF ID WBMEMEX
IF ID WBMEMEX
bubble bubble bubble bubble bubble
December 2013 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
lw $2, 20)$1(
Programexecutionorder)in instructions(
and $4, $2, $5
or $8, $2, $6
add $9, $4, $2
slt $1, $6, $7
Reg
IM
Reg
Reg
IM DM
CC 1 CC 2 CC 3 CC 4 CC 5 CC 6Time )in clock cycles(
IM Reg DM RegIM
IM DM Reg
IM DM Reg
CC 7 CC 8 CC 9 CC 10
DM Reg
RegReg
RegBubble
Load hazard requires one NOP
Clock was stopped to IF/ID
December 2013 12
Inserting Bubbles in Hardware
lw $2, 20)$1(
Programexecutionorder)in instructions(
and $4, $2, $5
or $8, $2, $6
add $9, $4, $2
slt $1, $6, $7
Reg
IM
Reg
Reg
IM DM
CC 1 CC 2 CC 3 CC 4 CC 5 CC 6Time )in clock cycles(
IM Reg DM RegIM
IM DM Reg
IM DM Reg
CC 7 CC 8 CC 9 CC 10
DM Reg
RegReg
RegBubble
Data can be taken from Reg-File, NOP is not required
Clock was stopped to PC
December 2013 13
Inserting Bubbles in Hardware
lw $2, 20)$1(
Programexecutionorder)in instructions(
and $4, $2, $5
or $8, $2, $6
add $9, $4, $2
slt $1, $6, $7
Reg
IM
Reg
Reg
IM DM
CC 1 CC 2 CC 3 CC 4 CC 5 CC 6Time )in clock cycles(
IM Reg DM RegIM
IM DM Reg
IM DM Reg
CC 7 CC 8 CC 9 CC 10
DM Reg
RegReg
RegBubble
December 2013 14
Another forwarding
PCInstruction
memory
Registers
Mux
Mux
Mux
Control
ALU
EX
M
WB
M
WB
WB
ID/EX
EX/MEM
MEM/WB
Datamemory
Mux
Hazarddetection
unit
Forwardingunit
0
Mux
IF/ID
Inst
ruct
ion
ID/EX.MemReadIF
/I DW
ri te
PC
Wri
te
ID/EX.RegisterRt
IF/ID.RegisterRd
IF/ID.RegisterRt
IF/ID.RegisterRt
IF/ID.RegisterRs
RtRs
Rd
Rt EX/MEM.RegisterRd
MEM/WB.RegisterRd
Bubble Insertion Hardware
Compare Reg # and check for memory read
Clock disable
Stall
December 2013 15
Load hazard detection logic
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עד שמגיעים אליה נכנסו כבר •
EXE, ID, IFלשלבי –
הפקודות שנכנסו בטעות !3אם קופצים, יש להשמיד את •
December 2013 20
מסלול הנתונים + הבקרה )תזכורת(
PC
Instructionmemory
Inst
ruct
ion
Add
Instruction[20– 16]
Mem
toR
eg
ALUOp
Branch
RegDst
ALUSrc
4
16 32Instruction[15– 0]
0
0
Mux
0
1
Add Addresult
RegistersWriteregister
Writedata
Readdata 1
Readdata 2
Readregister 1
Readregister 2
Signextend
Mux1
ALUresult
Zero
Writedata
Readdata
Mux
1
ALUcontrol
Shiftleft 2R
egW
rite
MemRead
Control
ALU
Instruction[15– 11]
6
EX
M
WB
M
WB
WBIF/ID
PCSrc
ID/EX
EX/MEM
MEM/WB
Mux
0
1
Mem
Writ
e
AddressData
memory
Address
December 2013 21
Control Hazards
Reg
Reg
CC 1
Time )in clock cycles(
40 beq $1, $3, 7
Programexecutionorder)in instructions(
IM Reg
IM DM
IM DM
IM DM
DM
DM Reg
Reg Reg
Reg
Reg
RegIM
44 and $12, $2, $5
48 or $13, $6, $2
52 add $14, $2, $2
72 lw $4, 50)$7(
CC 2 CC 3 CC 4 CC 5 CC 6 CC 7 CC 8 CC 9
Reg
28
40+4+28=72
December 2013 22
corruption
NOP+NOP+NOPפתרון ראשון:
פעמים 3אחרי פקודת קפיצה מותנית נכניס •NOP
לא משנה אם קופצים או לא, לא יגרם נזק•
הפתרון הראשון לא יעיל:•
מהפקודות הן קפיצה20%בד"כ –
פקודות רגילות + קפיצה4לולאה טיפוסית: –
מחזורים )תוספת 8 מחזורים, תימשך 5במקום –3 NOP)
בביצועים... 60%ירידה של –
December 2013 23
Useful delay slotsפתרון שני:
לאחריו? BEQ פקודות מלפני 3אולי אפשר להעביר •
דוגמה:•
בין אם תתבצע הקפיצה ובין אם לא, שלוש הפקודות בצבע •צריכות להתבצע
פקודות יעילות 3פתרון לא קל: קשה מאוד למצוא תמיד •למשל שישפיעו )אסור Branchשאפשר להעביר לאחר ה-
כמו בפתרון NOP. אם לא, נוסיף על החלטת הקפיצה(הראשון
יש פתרונות טובים יותר ! נראה בהמשך הערה:•
loop: sub $t0,$t0,$t1add $s0,$s1,$s2add $v0,$v1,$v0xor $t2,$t3,$t4bne $t0,$zero,loopnop X 3
loop: sub $t0,$t0,$t1bne $t0,$zero,loopadd $s0,$s1,$s2add $v0,$v1,$v0xor $t2,$t3,$t4
December 2013 24
data hazard?
Flush on Takenפתרון שלישי:
נשתמש בקוד המקורי ללא שינוי. אם לא תהיה •( נמשיך כרגיל. אם תהיה Not Takeקפיצה )
קפיצה, נשמיד שלוש פקודות
(flush the pipeריקון הצינור )•
: נאפס את קווי Load Hazardבדיוק כמו במקרה של –הבקרה
הביצועים:•
(CPI=1אם לא תהיה קפיצה, פקודה לכל מחזור שעון )–
3: תוספת NOP×3אם תהיה קפיצה, כמו במקרה של –60%מחזורי סרק, ירידת ביצועים עד
December 2013 25
EXE לשלב BRפתרון רביעי: העברת
PC
Instructionmemory
Inst
ruct
ion
Add
Instruction[20– 16]
Mem
toR
eg
ALUOp
RegDst
ALUSrc
4
16 32Instruction[15–0]
0
0
Mux
0
1
Add Addresult
RegistersWriteregister
Writedata
Readdata 1
Readdata 2
Readregister 1
Readregister 2
Signextend
Mux1
ALUresult
Zero
Writedata
Mux
1
ALUcontrol
Shiftleft 2
Reg
Wr it
e
MemRead
Control
ALU
Instruction[15– 11]
6
EX
M
WB
M
WB
WB
Readdata
IF/ID
PCSrc
ID/EX
EX/MEM
MEM/WB
Mux
0
1
Mem
Writ
e
AddressData
memory
Address
December 2013 26
Branch
EXE לשלב BRפתרון רביעי: העברת
פשוט )אין שינוי משמעותי בתכנון(•
3מספר הפקודות שעלולות להיזרק ירד מ-•2ל-
40%הפגיעה המרבית בביצועים ירדה ל- •
Branchהאם ניתן להמשיך ולהעביר את ה-•עוד יותר מוקדם?
כן!
December 2013 27
ID לשלב BRפתרון חמישי: העברת
PC Instructionmemory
4
Registers
Mux
Mux
Mux
ALU
EX
M
WB
M
WB
WB
ID/EX
0
EX/MEM
MEM/WB
Datamemory
Mux
Hazarddetection
unit
Forwardingunit
IF.Flush
IF/ID
Signextend
Control
Mux
=
Shiftleft 2
Mux
December 2013 28
ID לשלב BRפתרון חמישי: העברת
ואין כיצד לבצע השוואה )חיסור(ID בשלב ALUאין •
(XORנוסיף משווה פשוט )מבוסס שערי •
כדי שההשוואה תתבצע בין נתונים FORWARDנוסיף עוד יחידת •"טריים"
•STALLעשוי עדיין להיות דרוש
December 2013 29
ID.חישוב כתובת הקפיצה נעשה כבר בשלב ה
חישוב כתובת הקפיצה נעשה לכל פקודה! מדוע?
…sub $t0,$t0,$t1bne $t0,$zero,loop
Flushing Instructions
PC Instructionmemory
4
Registers
Mux
Mux
Mux
ALU
EX
M
WB
M
WB
WB
ID/EX
0
EX/MEM
MEM/WB
Datamemory
Mux
Hazarddetection
unit
Forwardingunit
IF.Flush
IF/ID
Signextend
Control
Mux
=
Shiftleft 2
Mux
Forwardingunit
December 2013 30
Single Delay Slotפתרון שישי:
אחד בלבדdelay slotנחזור לפתרון השני, אבל עם •
ID לשלב branchאפשרי, כי כבר העברנו את ה-•
מתבצעת תמידbranchאין צורך בריקון, הפקודה אחרי •
פקודה מועילה, אם המתכנת / הקומפיילר הצליחו–
במקרים אחריםNOPפקודת –
אזהרה: אסור לערבב תכניות שנכתבו לפתרונות •החמישי והשישי. מדוע?
כי מצאנו פקודה "מועילה" שצריכה להתבצע בכל מקרה, גם –אם הלולאה מסתימת, ובפתרון חמש היא תושמד.
December 2013 31
פתרון שביעי: החלטה דינמית
ננחש )ע"פ ההיסטוריה( האם הקפיצה תתבצע או לא•
ע"פ הניחוש, נביא את הפקודה הצפויה•
T, יעד הקפיצה אם )NT )Not Takenהפקודה הבאה אם –
אם הניחוש הצליח, הרווחנו זמן•
אם הניחוש נכשל:•
לפקודה שהובאה ונמשיך כרגילFlushנבצע –
נשקול לעדכן את הניחוש לפעם הבאה–
הסיפור המלא שייך לקורס "מבנה מחשבים ספרתיים"•
December 2013 32
סיכום
אמור להאיץ את החישובpipelineהשימוש ב-•
משלמים בחומרה ובהספק•
משלמים בסיבוך )תוכנה + חומרה( לטיפול •hazardsב-
December 2013 33