Upload
wade-hooper
View
36
Download
5
Embed Size (px)
DESCRIPTION
מבנה מחשבים ספרתיים 234267. Control Hazards מבוסס על תרגול מאת מורן גביש Updated by Franck Sala. הבעייה. BNEQ $2,$0,loop SW $1,20($3) MOV $2,$1 SW $3,220($3) … Loop:LW $1,20($3) ADDI $1,$ 3,100 INC $1. - PowerPoint PPT Presentation
Citation preview
1
מבנה מחשבים ספרתיים234267
Control Hazardsמבוסס על תרגול מאת מורן גביש
Updated by Franck Sala
2
BNEQ $2,$0,loopSW $1,20($3)MOV $2,$1SW $3,220($3)…
Loop: LW $1,20($3)ADDI $1,$3,100INC $1
בפקודת הסיעוף, מחליטים האם יש לבצע את הקפיצה לפי אות .MEM שמחושב רק בשלב PCsrcהבקרה
בנתיים ממשיכות להיכנס לצינור פקודות שייתכן שאין צורך לבצען (במקרה שהקפיצה נלקחת).
כלומר, כאשר מכריעים האם יש לקפוץ, נכנסו כבר שלוש פקודות עוקבות לצינור.
כי בו כל פקודה single cycleבעיה זו לא נוצרת במעבד שהוא מתבצעת בשלמות לפני שנכנסת הפקודה הבאה לביצוע.
הבעייה
Instr
ucti
on
3
ALU
result
Zero
Readreg 1
Readreg 2
Writereg
Writedata
Readdata 1
Readdata 2
Reg
iste
r File
32
EX/MEM MEM/WBIF/ID
InstructionMemory
Read Address
mux
1
0
ID/EX
WB
EX
M
WB
Rd\Rt
WB
M
Read Address
Write Data
ReadData
Write Address
Rd\Rt
MOV $2,$1 SW $1,20($3) BNEQ $2,$0,loopSW $3,220($3)
DataMemor
y
mux
1
0
4
+
PC
LW $1,20($3)ADDI $1,$3,100INC $1
Only now we know if we should have
jumped…
Maybe those commands are not
going to be executed
PCSrc
4
Controlפתרונות ל- Hazards
Stall
הפתרון הפשוט ביותר הוא להשהות את צינור הביצוע. האם הפקודה היא פקודת סיעוף,IFנזהה בשלב
ואם כן, נבצע השהייה של הצינור למשך שלושה מחזורי .MEMשעון, עד להכרעת הקפיצה שהיא בשלב
הבעיה בפתרון כזה היא פגיעה בביצועי המעבד.
ALUR
eg
iste
r File
Instr
ucti
on
Mem
ory
Data
Mem
ory
ID EX MEM WB
Instr
ucti
on
5
ALU
result
Zero
Readreg 1
Readreg 2
Writereg
Writedata
Readdata 1
Readdata 2
Reg
iste
r File
32
EX/MEM MEM/WBIF/ID
InstructionMemory
Read Address
mux
1
0
ID/EX
WB
EX
M
WB
Rd\Rt
WB
M
Read Address
Write Data
ReadData
Write Address
Rd\Rt
BNEQ $2,$0,loop
DataMemor
y
mux
1
0
4
+
PC
(Bubble)
PCSrc
Identify branch command
BNEQ $2,$0,loop
(Bubble)
(Bubble) (Bubble)
Branch ?
BNEQ $2,$0,loop(Bubble)Next correct command
BNEQ $2,$0,loopNext sequential command
6
Controlפתרונות ל- Hazards (2)
Assume not takenמדיניות .pipelineנניח שהקפיצה לא תתממש ונמשיך לאפשר לפקודות להכנס ל-
אם בשלב ההכרעה אכן יוכרע שהקפיצה לא תתבצע, אז לא צריך לעשות HDUדבר. אך אם יוכרע שהקפיצה היתה צריכה להתבצע, יחידת
(Hazard Detection Unit).תקבל אות המציין שמתבצעת קפיצה
פקודות):3 באופן הבא (סה"כ pipeline" את ה-תנקה "HDUה- באותות הבקרה של השלבים 0 העברת הערך ID -ו EXE איפוס הפקודה שבשלב ה IF ע"י השתלת NOP-ל IR.
.PCכעת ניתן לטעון את כתובת הקפיצה ל-
כן קופצות branchהבעיה בפתרון זה היא שמרבית פקודות ה-(לדוגמא בלולאות קופצים חוץ מאשר באיטרציה האחרונה),
לכן גם שיטה זו פוגעת בביצועי המעבד.
ALUR
eg
iste
r File
Instr
ucti
on
Mem
ory
Data
Mem
ory
ID EX MEM WB
Instr
ucti
on
7
ALU
result
ZeroReadreg 1
Readreg 2
Writereg
Writedata
Readdata 1
Readdata 2
Reg
iste
r File
32
EX/MEM MEM/WBIF/ID
InstructionMemory
Read Address
mux
1
0
WBWB
M
Read Address
Write Data
ReadData
DataMemor
yWrite Address
mux
mux
Con
trol
HDU
4
+
PC
mux
1
0
ID/EX
WB
EX
M
mux0
mux0
mux
0
PCSrc
SW $1,20($3) BNEQ $2,$0,loopSW $3,220($3)
LW $1,20($3)
MOV $2,$1
SW $1,20($3)MOV $2,$1
BNEQ $2,$0,loopSW $1,20($3)MOV $2,$1No Operation
8
Controlפתרונות ל- Hazards (3)
assume takenמדיניות
מהסיבות שצוינו בפתרון הקודם, ניתן היה לחשוב תביא לפתרון טוב יותר. לפי assume takenשמדיניות
אכן מבצעת קפיצה. branchמדיניות זו נניח שכל פקודת כדי לממש זאת, נטען את כתובת הקפיצה מיד עם זיהוי
. IF בשלב branchפקודת ה-הבעיה היא שהמדיניות לא ניתנת למימוש פשוט: כתובת
של הפקודה,EXEהקפיצה מחושבת רק בשלב מאין לטעון את הפקודות IFולכן לא ניתן לדעת בשלב
הבאות
ALUR
eg
iste
r File
Instr
ucti
on
Mem
ory
Data
Mem
ory
ID EX MEM WB
9
Control Hazards (4)פתרונות ל- BTBשימוש במנגנון חיזוי
Direction: (Taken/Not Taken) מסוימת בפעמים האחרונות. branchמנגנון החיזוי "זוכר" את ההתנהגות של פקודת
אם הפקודה ביצעה את הקפיצות בפעמים האחרונות, נניח שגם כעת היא תבצע את הקפיצה.
Target:בנוסף להיסטוריה, מנגנון החיזוי "זוכר" גם את כתובת היעד של הקפיצה.
מסוימת) ממומש באמצעות מכונת מצבים. branchזכרון ההיסטוריה (עבור פקודת לדוגמא:
"י כאשר צמותי הגרף מציינים את מצב החיזוי והקשתות את המעברים שיש לבצע עפ.branchהתוצאה (האמיתית) של פקודת ה-
branchכי בפעם הראשונה בה נתקלים בפקודת not takenמצב התחלתי – תקפוץ בפעם הראשונה, נוכל branchלא ידועה כתובת היעד. רק לאחר שפקודת ה-
לשמור עבורה את כתובת היעד.
10
Control Hazards (5)פתרונות ל- מכונת המצבים הבאה, מספקת חיזוי אמין יותר:
לא takenלמשל, בסיום ביצוע לולאה נחזה שתתרחש קפיצה, אך נשגה ונעבור למצביציב. בפעם הבאה בה נחזור לבצע את הלולאה שוב, נחזה שתתרחש קפיצה ואכן בד"כ
חיזוי זה יהיה נכון. , אזי not takenבמכונה הקודמת (עם שני מצבים) לאחר השגיאה הראשונה נעבור למצב
, וסביר להניח שבזאת נשגה שוב.not takenבפעם הבאה שנגיע ללולאה נחזה אי-קפיצה חריגה גרמה לנו לבצע שני חיזויים שגויים, לעומת חיזוי שגוי אחד במכונה עם
המצבים היציבים. לא יציב.not taken – 01בתור המצב ההתחלתי באוטומט כזה נקבע
הנם מצבים יציבים.11 ו-00במכונה זו המצבים המעבר מאחד ממצבים אלו למצב מנוגד לו יתרחש רק אם נשגה פעמיים בחיזוי.
בשגיאה הראשונה נעבור למצב זהה אך לא יציב, ורק בפעם השנייה שנשגה, נעבור למצב ההפוך.
/ אי-קפיצות חריגות.שימוש במצבים כאלו מונע טעויות בחיזוי הנובעות מקפיצות
11
Control Hazards (6)פתרונות ל-
BTB (Branch Target Buffer)מבנה
12
פתרונות ל- Control Hazards
(7)
BTB (Branch Target Buffer)מבנה שמזהה את הפקודה. branchבשדה השמאלי נשמרת כתובת פקודת ה-
. hash tableלפעמים לא מחזיקים את הכתובת המלאה, אלא משתמשים ב- ממופות branch- יכול ליצור מצב בו מספר פקודותhash tableשימוש ב
לאותה הכניסה בטבלה וכתוצאה מכך ייתכן החיזוי שגוי.
בשדה האמצעי נשמרת כתובת היעד. כאמור, כתובת זו יכולה להתווסף - בוצעה לפחות פעם אחת.branchלטבלה רק לאחר שפקודת ה
13
PC מקבל את ה-BTBה-ובודק האם נמצא
בטבלה
PCה-נמצא
?BTBב-
החיזוי הואtaken?
בכתובת PCטען החיזוי PC PC + 4
כן לא
כן לא
זכרון הפקודות PCמקבל את ה-
ומביא את הפקודה
ID/IFהבריח נטען בפקודה
IF
IDהפקודה
היא סיעוף?
אם צריך, הוסף BTBכניסה ל-
המשך כרגיל
כן לא
EXE/IDהבריח נטען בפקודת
הסיעוף
ID/IFהבריח נטען בפקודה
הבאה
14
EXE
MEM
MEM/EXEהבריח נטען בפקודת
הסיעוף
EXE/IDהבריח נטען בפקודת
הסיעוף
עדכן את מכונת BTBהמצבים ב-
חשב את תנאי הקפיצה ואת כתובת
היעד
WB
החיזוי נכון?
המשך כרגיל
PC וטען ל-flushבצע את הכתובת
המחושבת
כן לא
ID/IF, EXE/ID, MEM/EXEהבריחים (הכנסת בועה)NOPנמחקים ל-
MEM/WBהבריח נטען בפקודת הסיעוף
IF/ID הבריח IFבשלב נטען בפקודת היעד של הקפיצה
ID ו-IFהשלבים ממשיכים כרגיל
ID/IFהבריח נטען בפקודה
הבאה
15
דוגמא
עם מנגנון חיזוי pipeline IF,ID,EX,MEM,WBנתון מעבד בעל חמישה שלבי )BTB:הפועל ע"פ האלגוריתם הבא (
-בפעם הראשונה, מצב החיזוי שלו BTB ב branch כאשר נרשמת פקודת.01מאותחל ל-
MOVI R1,2loop1: MOV R2,R1loop2: Dec R2
BNEQ R2,R0,loop2INC R1BLT R1,4,loop1
BNEQמה יהיה החיזוי בכל פעם שפקודת השבקטע הבא מבוצעת:
?מהי כמות השגיאות בחיזוי
16
מחזור R1 R2 מצב נוכחי
חיזוי בפועל המצב הבא
שגיאה?
Loop1
BNEQ
BNEQ
Loop1
BNEQ
BNEQ
BNEQ
MOVI R1,2loop1: MOV R2,R1loop2: Dec R2
BNEQ R2,R0,loop2INC R1BLT R1,4,loop1
)2דוגמא (
מחזור R1 R2 מצב נוכחי
חיזוי בפועל המצב הבא
שגיאה?
Loop1 1 2 2
BNEQ 2 2 1 01 not taken taken 10 +
BNEQ 3 2 0 10 taken not taken 01 +
Loop1 4 3 3
BNEQ 5 3 2 01 not taken taken 10 +
BNEQ 6 3 1 10 taken taken 11
BNEQ 7 3 0 11 taken not taken 10 +
17
מחזור R1 R2 מצב נוכחי
חיזוי בפועל המצב הבא
שגיאה?
Loop1
BNEQ
BNEQ
Loop1
BNEQ
BNEQ
BNEQ
MOVI R1,2loop1: MOV R2,R1loop2: Dec R2
BNEQ R2,R0,loop2INC R1BLT R1,4,loop1
)2דוגמא (
מחזור R1 R2 מצב נוכחי
חיזוי בפועל המצב הבא
שגיאה?
Loop1 1 2 2
BNEQ 2 2 1 01 not taken taken 10 +
BNEQ 3 2 0 10 taken not taken 01 +
Loop1 4 3 3
BNEQ 5 3 2 01 not taken taken 10 +
BNEQ 6 3 1 10 taken taken 11
BNEQ 7 3 0 11 taken not taken 10 +
18
)3דוגמא (
) ובאותו שלב branch (של ה- ID מבוצע בשלב ה- BTBנניח שהחיפוש ב הנכון.PCנטען ה-
, הפקודה מכתובת היעד Taken, כאשר החיזוי הוא BTB hitבמקרה של שלו).EXמובאת במחזור שאחר-כך (שלב
ובמקרה של חיזוי שגוי מבוצע EXEהכרעת הקפיצה מבוצעת בשלב ה- pipeline flush.
ALUR
eg
iste
r File
Instr
ucti
on
Mem
ory
Data
Mem
ory
ID EX MEM WB
BTBRead
19
)3דוגמא (
ALUR
eg
iste
r File
Instr
ucti
on
Mem
ory
Data
Mem
ory
ID EX MEM WB
?ב. כמה מחזורי שעון מבוזבזים במקרה של חיזוי נכון, וכמה בחיזוי שגוי
: אנו טוענים באופן רגיל NT הוא branchעבור חיזוי נכון , כאשר ה-פקודות באופן סדרתי כרגיל ולכן איננו מבזבזים מחזורי שעון.
וטעינת ה- BTB : החיפוש ב T הוא branchעבור חיזוי נכון , כאשר ה-PC -הנכון נעשה בשלב ה ID -במקום בשלב ה IF.
לפקודה הבאה שאמורה להתבצע ללא fetchלכן לא נוכל לבצע למשך מחזור שעון אחד.pipelineהשהיית ה -
לכן נבזבז מחזור שעון יחיד.
במקום בשלב ה- EXעבור חיזוי שגוי:הכרעת הקפיצה מבוצעת בשלב ה MEM מ"ש על ביצוע ה-2. לכן נפסיד flush .
20
)4דוגמא (
beq: IF ID EX MEM WB
dest: stall IF ID EX MEM WB
בחיזוי נכון:
BTB יחיד שאינו תלוי בנכונות החיזוי, אלא נובע מהעובדה שהחיפוש ב stallנבצע .pipeline. במעבד המקורי לא היה צורך בהשהיית ה- IDנעשה בשלב ה-
בחיזוי שגוי:
beq: IF ID EX MEM WB
:שגוי stall IF ID EX MEM WB
dest: IF ID EX MEM WB
EXנפסיד שני מחזורי שעון בלבד מכיוון שהכרעת הקפיצה מבוצעת בשלב
למשך שלושה מחזורי שעון כי pipeline המקורי השהנו את ה- MIPSבמעבד ה MEMהכרעת הקפיצה בוצעה בשלב ה.
21
)4דוגמא ( במקרה של חיזוי נכון.stallג. הצע דרכים שיאפשרו להימנע מה-
:1פתרון מספר ע"י הכתובת שלהן. אם במקום כתובת פקודת BTBמזוהות ב branchפקודות ה
branch את כתובת הפקודה שמתבצעת לפני פקודת הBTB נשמור ב- branchה- branch במקרה של חיזוי נכון, כי כשהפקודה שלפני פקודתstallנוכל להימנע מביצוע
. IF נמצאת בשלב ה branch בעוד שפקודת הBTB יחל החיפוש ב-IDתגיע לשלב הזהו המצב האופטימלי, כפי שקיים במעבד המקורי.
ממקומות שונים, ע"י branch ישנן תוכניות בהן ניתן להגיע לפקודת ה-בעיה אפשרית: BTB. במקרה כזה נצטרך לשמור שורות נוספות ב-branchקפיצה לכתובת פקודת ה-
.branchעבור כל פקודה שיכולה להיות הפקודה שלפני פקודת ה
:2פתרון מספר בנוסף לכתובת הקפיצה, נשמור גם את הפקודה שנמצאת בכתובת הקפיצה, ובכך
של הפקודה.IFנחסוך את שלב ה-
3פתרון מספר של IF לשלב ה- BTBניתן להוסיף חומרה בעזרתה נוכל להקדים את החיפוש ב-
(כמו במעבד המקורי) branchפקודת ה-
22
שאלה ממבחן
שנלמד בכיתה. במעבד זה הכרעת הקפיצה מתבצעת MIPSנתון מעבד הדומה ל-.IF והחיפוש בו מתבצע בשלב BTB. המעבד מצויד במנגנון EXבשלב
הוא פחות BTB מסודר לפי כתובתה של הוראת הקפיצה. זמן החיפוש ב-BTBה- כתובת היעד ומכונת BTBממחזור שעון יחיד. עבור כל הוראת קפיצה נשמרת ב-
אינו מכיל כל מידע נוסף. BTBמצבים לחיזוי. ה-
:place2נתון קטע הקוד הבא: ADDI R4,R4,#2ADDI R4,R4,#2LD R10,R4(128)ADDI R9,R9,#0BEQ R10,R1 place1ADDI R7,R7,#1
place1: BNEQ R10,R1 place2ADDI R8,R8,#1
כבר הכיל את שתי הוראות הסיעוף המותנה BTBידוע כי לפני הרצת הקוד ה-המוצגות ואת כתובות היעד שלהן.
23
)2שאלה ממבחן (
BNEQ) מדויקים, ושהוראת ה-BNEQ ו- BEQבהנחה שהחיזויים של הוראות הסיעוף ( ועד IFקופצת. כמה מחזורים יעברו מרגע שההוראה הראשונה כבר נמצאת בשלב
שהיא חוזרת אליו שוב?
לא קופצת (התנאים שלהן הפוכים והפקודה בינהן BEQ קופצת, אז BNEQ: אם פתרון) R10 ולא את R1לא משנה לא את
מחזורי שעון7 פקודות באיטרציה =< 7 סה"כ יש
place2: ADDI R4,R4,#2ADDI R4,R4,#2LD R10,R4(128)ADDI R9,R9,#0BEQ R10,R1 place1ADDI R7,R7,#1
place1: BNEQ R10,R1 place2ADDI R8,R8,#1
- BTB at IF (target + Bimodal)- TKN/NTKN @ EXE
- Correct prediction of BEQ and BNEQ- BNEQ is taken
- How many cycles for 1st place2 iteration?
24
)3שאלה ממבחן (
מחזורי שעון לביצוע הקוד (כלומר, מרגע שההוראה הראשונה בקוד 33ידוע כי למעבד נדרשו ). כמה פעמים התבצעה pipeline ועד שההוראה האחרונה עזבה את הצינור-IFנמצאת בשלב
? LDהוראת
פתרון: קופצת BEQ לא קופצת BNEQבאיטרציה אחרונה • פקודות7גם באיטרציה האחרונה יש • מחזורי שעון. סה"כ 4 צריכים pipeline מחזורי שעון. למילוי 2על כל טעות בחיזוי משלמים •
התכנית לוקחת:7#*iterations + 2*#branch_prediction_errors + 4= 33
, branch פקודות 2בגלל שבכל איטרציה יש 2#*iterations >= #branch_prediction_errors
הפתרון היחיד:#iterations=3, #branch_prediction_errors = 4
פעמים.3 מתבצעת LD=<פקודת
place2: ADDI R4,R4,#2ADDI R4,R4,#2LD R10,R4(128)ADDI R9,R9,#0BEQ R10,R1
place1ADDI R7,R7,#1
place1: BNEQ R10,R1 place2
ADDI R8,R8,#1
- BTB at IF (target + Bimodal)- TKN/NTKN @ EXE
- Correct prediction of BEQ and BNEQ- BNEQ is taken
- How many LD was executed in 33 cycles ?
25
)4שאלה ממבחן (
כמה פעמים היה החיזוי להוראות הסיעוף נכון, וכמה תחת ההנחות של הסעיף הקודם, פעמים שגוי?
תן דוגמא למכונת מצבים שתתאים לתוצאה שהשגת בסעיף הקודם. עליך לציין את מצב המכונה של כל אחת מההוראות לפני ביצוע הקוד.
branch פעמים מתבצע 6 איטרציות 3 ישנן פתרון: חיזויים נכונים. 2 טעויות חיזוי 4 לפי סעיף ב' יש
T NTNT
T NT
):BNEQ – NT ושל BEQ – T מצבים ( מצב התחלתי של 2: מכונה של פתרון
26
backups
Backup
234267 - November 200527
28
ALU
Src
6
ALU
result
Zero
+
Shift left 2
ALUControl
RegDst
Reg
Wri
teReadreg 1
Readreg 2
Writereg
Writedata
Readdata 1
Readdata 2
Reg
iste
r File
[15-0]
[20-16]
[15-11]
Sig
nexte
nd
16
32
EX/MEM MEM/WB
Inst
ruct
ion
Mem
Read
Mem
Wri
te
Bra
nch
PCSrc
Mem
toR
eg
4
+
IF/ID
PC
InstructionMemory
Read Address
mux
1
0
mux
1
0
mux
1
0
mux
1
0
ID/EX
WB
EX
M
Con
trol
32
WB
Rd\Rt
Reg
Wri
te
WB
M
Read Address
Write Data
ReadData
DataMemor
yWrite Address
Rd\Rt
ALU
op
Reg
Dst
29
ALU
result
ZeroReadreg 1
Readreg 2
Writereg
Writedata
Readdata 1
Readdata 2
Reg
iste
r File
32
EX/MEM MEM/WB
Inst
ruct
ion
IF/ID
InstructionMemory
Read Address
mux
1
0
WBWB
M
Read Address
Write Data
ReadData
DataMemor
yWrite Address
mux
mux
Con
trol
HDU
4
+
PC
mux
1
0
ID/EX
WB
EX
M
mux0
mux0
mux
0
PCSrc