1
OOOE
2
כיצד ניתן לשפר את ביצועי המערכת
אותו למדנו זה מכבר, MIPS של pipelineב-• בודדת שדאגה לביצוע כל ALUהייתה יחידת
(.EXEהפעולות )שלב ה- ישנן פעולות כבדות יותר וכבדות פחות – הבעיה:•
למשל חיבור שלמים יהיה קל יותר מפעולת חילוק.
מכיוון שמחזור השעון אמור להספיק לביצוע כל פעולה הרי שבעקבות הפעולות הכבדות נקבל
מחזור שעון ארוך – פגיעה בביצועים.
3
1פתרון
נאפשר רק ביצוע הוראות פשוטות שלוקחות זמן קצר, •והוראות כבדות יפורקו למספר הוראות פשוטות )מעבדי
הראשונים היו כאלה(. RISCה-
חסרונות: ישנן פעולות כגון חישוביfloating-point אשר קשה
לפרק אותם לחלקים בעלי זמן ביצוע שווה )ישנן פעולות כגון גישה לזיכרון שזמן הביצוע )גישה
( או משתנה מדור busאינו קבוע )תלוי בעומס על ה- לדור
4
2פתרון
)או pipeline ל - EXEנהפוך את שלב ה-•( כך הוראה כבדה תתבצע במספר multicycleל-
שלבים ונוכל לשמור על מחזור שעון קטן. חסרונות:
לא ברור שתמיד נוכל לפרק הוראה כבדה לשלביpipeline.
-הוספת שלבים מגדילה את הpenalty שאנו משלמים על חיזויים שגויים וכן יוצרת בעיות עם
( – אמנם data hazardתלויות המידע )נקטין את מחזור השעון אבל אנו עלולים לפגוע
.CPIב-
5
דוגמא
IF ID
EX
M1 M2 M3 M4 MEM WB
DIV
Integer unit
Multiply
divider
R1<-R1+4
R2<-R3*R3
R4<-R3+R4
6
דוגמא
IF ID
EX
M1 M2 M3 M4 MEM WB
DIV
Integer unit
Multiply
divider
R1<-R1+4
R2<-R3*R3
R4<-R3+R4
R1<-R1+4R2<-R3*R3
7
דוגמא
IF ID
EX
M1 M2 M3 M4 MEM WB
DIV
Integer unit
Multiply
divider
R1<-R1+4
R2<-R3*R3
R4<-R3+R4
R1<-R1+4
R2<-R3*R3R4<-R3+R4
8
דוגמא
IF ID
EX
M1 M2 M3 M4 MEM WB
DIV
Integer unit
Multiply
divider
R1<-R1+4
R2<-R3*R3
R4<-R3+R4
R1<-R1+4
R2<-R3*R3
R4<-R3+R4
9
דוגמא
IF ID
EX
M1 M2 M3 M4 MEM WB
DIV
Integer unit
Multiply
divider
R1<-R1+4
R2<-R3*R3
R4<-R3+R4
R1<-R1+4
R2<-R3*R3
R4<-R3+R4
10
דוגמא
IF ID
EX
M1 M2 M3 M4 MEM WB
DIV
Integer unit
Multiply
divider
R1<-R1+4
R2<-R3*R3
R4<-R3+R4
R2<-R3*R3
R4<-R3+R4
11
דוגמא
IF ID
EX
M1 M2 M3 M4 MEM WB
DIV
Integer unit
Multiply
divider
R1<-R1+4
R2<-R3*R3
R4<-R3+R4
R2<-R3*R3
R4<-R3+R4
12
דוגמא
IF ID
EX
M1 M2 M3 M4 MEM WB
DIV
Integer unit
Multiply
divider
R1<-R1+4
R2<-R3*R3
R4<-R3+R4
R2<-R3*R3
R4<-R3+R4
13
דוגמא
IF ID
EX
M1 M2 M3 M4 MEM WB
DIV
Integer unit
Multiply
divider
R1<-R1+4
R2<-R3*R3
R4<-R3+R4
R2<-R3*R3R4<-R3+R4
14
3פתרון שונה לפקודות בעלות זמן ביצוע שונה.pipelineנבנה • שונה להסתיים שלא ע"פ pipelineנאפשר להוראות מ-•
סדר הופעתן בקוד. קרי, כל עוד התוכנית שומרת על נכונותה, נאפשר לפקודה שמופיעה בקוד מאוחר יותר
להסתיים לפני שפקודה שקדמה לה מסתיימתשיטה זאת מאפשרת ביצוע של מספר הוראות במקביל •
שונה וכל עוד אינן תלויות pipelineכל עוד שייכות ל- של המכונה CPIאחת בשניה. כך נוכל לשפר את ה-
ובכך לשפר ביצועים.
15
דוגמא
IF ID
EX
M1 M2 M3 M4 MEM WB
DIV
Integer unit
Multiply
divider
R1<-R1+4
R2<-R3*R3
R4<-R3+R4
R1<-R1+4R2<-R3*R3
16
דוגמא
IF ID
EX
M1 M2 M3 M4 MEM WB
DIV
Integer unit
Multiply
divider
R1<-R1+4
R2<-R3*R3
R4<-R3+R4
R1<-R1+4
R2<-R3*R3R4<-R3+R4
17
דוגמא
IF ID
EX
M1 M2 M3 M4 MEM WB
DIV
Integer unit
Multiply
divider
R1<-R1+4
R2<-R3*R3
R4<-R3+R4
R1<-R1+4
R2<-R3*R3
R4<-R3+R4
18
דוגמא
IF ID
EX
M1 M2 M3 M4 MEM WB
DIV
Integer unit
Multiply
divider
R1<-R1+4
R2<-R3*R3
R4<-R3+R4
R1<-R1+4
R2<-R3*R3
R4<-R3+R4
19
דוגמא
IF ID
EX
M1 M2 M3 M4 MEM WB
DIV
Integer unit
Multiply
divider
R1<-R1+4
R2<-R3*R3
R4<-R3+R4
R2<-R3*R3
R4<-R3+R4
20
דוגמא
IF ID
EX
M1 M2 M3 M4 MEM WB
DIV
Integer unit
Multiply
divider
R1<-R1+4
R2<-R3*R3
R4<-R3+R4
R2<-R3*R3
R4<-R3+R4
21
דוגמא
IF ID
EX
M1 M2 M3 M4 MEM WB
DIV
Integer unit
Multiply
divider
R1<-R1+4
R2<-R3*R3
R4<-R3+R4
R2<-R3*R3
22
דוגמא
IF ID
EX
M1 M2 M3 M4 MEM WB
DIV
Integer unit
Multiply
divider
R1<-R1+4
R2<-R3*R3
R4<-R3+R4
R2<-R3*R3
23
CPI כמו שהכרנו עד היום in orderעניין נוסף: במכונות •
.1 מינימאלי של CPIניתן )אם בכלל( להגיע ל- יש את חסם זה אם נאפשר OOOEגם בביצוע של •
.EXEביצוע מקביל רק של שלב ה-
אבל נאפשר גם בשאר השלבים ביצוע מספר •הוראות במקביל אזי שנוכל לשבור את חסם זה.
IF ID EXE MEM WB
IF ID EXE MEM WB
24
(data hazardתלויות מידע ):RAWלהזכירכם אנו מכירים כבר תלות מידע מסוג •
ADD R1,R2,R3
ADD R5,R6,R1
•OOOE:יוצרת תלויות מידע חדשות WAR – Write After Read:
DIV R1,R2,R3
ADD R5,R6,R1
ADD R6,R7,R8
הוראת החילוק הארוכה מעכבת את הוראת החיבור העוקבת • out of, מכיוון שאנו מאפשרים ביצוע R1שממתינה לערך של
order ההוראה השלישית שלא מחכה לכלום תתבצע, ואז R6ההוראה השנייה לכשתתבצע עלולה לקרוא את הערך של
כפי שנכתב ע"י ההוראה השלישית ולא כפי שהתכוון המשורר )או המתכנת(.
25
WAW – Write After Write: DIV R1,R2,R3ADD R5,R6,R1ADD R5,R7,R8
גם כאן ההוראה השנייה מעוכבת ואילו השלישית לא, מה שעלול • לפני ההוראה R5להתבצע הוא שההוראה השלישית תכתוב ל-
השנייה, ולבסוף כשהשנייה תכתוב גם כן, היא תשנה את ערך זה.
בערך לא עדכני.R5בסופו של דבר, יחזיק
תלויות אלו נקראותFalse Dependencies כיוון שאם היה( לרשות המהדר )קומפילר( מספר בלתי מוגבל של רגיסטרים היה
יכול לבחור רגיסטרים שונים לכל פעולה ואז לא היו הפקודות תלויות אחת בשניה יותר(
בעיה נוספת שעוד לא הכרנו היאStructural Hazard זהו מצב ,בו הוראה כלשהי נאלצת להמתין כי אין יחידת חישוב פנויה
עבורה. למשל רצף פעולות חילוק עלול לגרום לכך.
26
Register Renaming
.Register Renamingדרך לפתור את בעיית התלויות החדשות היא ע"י •הרעיון: שמירת שתי מערכות רגיסטרים זאת אשר גלויה למשתמש •
)רגיסטרים ארכיטקטונים( ואשר בשימוש המהדר )שפת הסף(, ומספר (.poolגדול של רגיסטרים פיזיים מתוך מאגר )
אנו מבצעים שני מיפויים: האחד מהרגיסטרים הארכיטקטוניים •לרגיסטרים הפיזיים לצורך פתירת בעיות תלויות מדומות, והשני
מהרגיסטרים הפיזיים לארכיטקטוניים לצורך שמירת "תמונת המכונה" כפי שהקומפילר בנה אותה.
לשלב הביצוע. decodeהמיפוי הראשון מבוצע במעבר בין שלב ה-• ומעבירים את הערך commitהמיפוי השני מבוצע כחלק מפעולת
שלהם לרגיסטרים המקוריים.-fetch וה- commitע"פ רוב, מעבדים מודרניים מבצעים את שלבי ה-•
decode( בסדר התוכנית in order ואילו את שלב הביצוע מבצעים )out of order.
27
דוגמא:
T0
T1
T2
T3
Tn
R1
R2
R3
R4 WARWAW
bufferציקלי
DIV R1,R2,R3ADD R2,R4,R1ADD R2,R3,R3ADD R4,R3,R2
28
דוגמא:
T0
T1
T2
T3
Tn
R1
R2
R3
R4
T0
R2/R3
DIV R1,R2,R3ADD R2,R4,R1ADD R2,R3,R3ADD R4,R3,R2
29
דוגמא:
T0
T1
T2
T3
Tn
R1
R2
R3
R4
DIV R1,R2,R3ADD R2,R4,R1ADD R2,R3,R3ADD R4,R3,R2
T0
R2/R3R4+T0
T1
30
דוגמא:
T0
T1
T2
T3
Tn
R1
R2
R3
R4
DIV R1,R2,R3ADD R2,R4,R1ADD R2,R3,R3ADD R4,R3,R2
T0
R2/R3R4+T0
T2
R3+R3
31
דוגמא:
T0
T1
T2
T3
Tn
R1
R2
R3
R4
DIV R1,R2,R3ADD R2,R4,R1ADD R2,R3,R3ADD R4,R3,R2
T0
R2/R3R4+T0
T2
R3+R3R3+T2
T3
שים לב:
כעת אין תלויות מסוג False Dependencies
עדיין קייםRAWאבל
32
ROB )reorder Buffer(
, שהוא ROBדרך נפוצה למימוש הדבר היא ע"י • decodeחוצץ המקבל את ההוראות משלב ה-
מהווה את ROBע"פ הסדר, הכניסה התאימה ב-מספר הרגיסטר הזמני.
נכתבת התוצאה לכניסה המתאימה EXEבשלב ה- commit וההוראות מבצעות את שלב ה-ROB ב-
– הוראה יכולה לבצע ROBע"פ הסדר שלהן ב-commit.רק אם זו שלפניה עשתה זאת
33
Fetch &Decode
EXE Retire(commit)
In-order In-order
)out-of-order(
מקום להוראה
הבאה
הוראה הבאה
שמבצעת commit
34
P6 שממומשת P6 ניקח את מכונת ה-OOOכדוגמא ל-•
.Pentium3 ו-Pentium2במעבדי decode נכנסות לשלב ה-CISCבמכונה זו ההוראות מסוג •
ע"פ הסדר. מסוג uopsשם הן מפורקות להוראות פנימיות הנקראות •
RISC-הוראות אלו מתבצעות בשלב ה .EXE out-of-order.
מחוברים uops ה-)commit )retireלבסוף בשלב ה-• ע"פ הסדר המקורי של CICSבחזרה להוראות ה-
ההוראות. הממומש register renamingהמכונה גם משתמשת ב-•
.ROBע"י
35
• In-Order Front End– BIU: Bus Interface Unit– IFU: Instruction Fetch Unit )includes IC(– BTB: Branch Target Buffer– ID: Instruction Decoder– MIS: Micro-Instruction Sequencer– RAT: Register Alias Table
• Out-of-order Core– ROB: Reorder Buffer– RRF: Real Register File– RS: Reservation Stations– IEU: Integer Execution Unit– FEU: Floating-point Execution Unit – AGU: Address Generation Unit– MIU: Memory Interface Unit– DCU: Data Cache Unit– MOB: Memory Order Buffer– L2: Level 2 cache
• In-Order Retire
MIS
AGU
MOB
External Bus
IEU
MIU
FEU
BTB
BIU
IFU
ID
RAT
RS
L2
DCU
ROB
OOOE – The P6 Example
36
דוגמא
DIV R2,R4,R3
LD R3,R4)50(
DIV R1,R2,R3
ADD R2,R4,R3
SUB R3,R2,R3
נניח כי:
Div: 4cc
Add/Sub: 1cc
Mem: 2cc
37
Instruction Q
MOBRSROB
Execute
Retire
RATR1
R2
R3
R4
R3<-R2-R3R2<-R4+R3R1<-R2/R3
R3<-MEM)R4+50(
R2<-R4/R3
38
Instruction Q
MOBRSROB
Execute
Retire
RATR1
R2
R3
R4
R3<-R2-R3R2<-R4+R3R1<-R2/R3
R3<-MEM)R4+50(
R2<-R4/R3
39
Instruction Q
MOBRSROB
Execute
Retire
RATR1
R2
R3
R4
R3<-R2-R3R2<-R4+R3R1<-R2/R3
R3<-MEM)R4+50(
R2<-R4/R3
R2<-R4/R3
RB0
RB0<-R4/R3RS0
40
Instruction Q
MOBRSROB
Execute
Retire
RATR1
R2
R3
R4
R3<-R2-R3R2<-R4+R3R1<-R2/R3
R3<-MEM)R4+50(
R2<-R4/R3
R2<-R4/R3
RB0
RB0<-R4/R3RS0
RB0<-R4/R3 )1(
RB2
R4+50R3<-MEM)RB1(
RS1M0
RB1<-R4+50RB2<-MEM)RB1(
41
Instruction Q
MOBRSROB
Execute
Retire
RATR1
R2
R3
R4
R3<-R2-R3R2<-R4+R3R1<-R2/R3
R3<-MEM)R4+50(
R2<-R4/R3
R2<-R4/R3
RB0
RB0<-R4/R3RS0
RB0<-R4/R3 )2(
RB2
R4+50R3<-MEM)RB1(
RS1 RB1<-R4+50
R1<-R2/R3M0
RB2<-MEM)RB1(
RB3
RB1<-R4+50
W
RB3<-RB0/RB2RS2
42
Instruction Q
MOBRSROB
Execute
Retire
RATR1
R2
R3
R4
R3<-R2-R3R2<-R4+R3R1<-R2/R3
R3<-MEM)R4+50(
R2<-R4/R3
R2<-R4/R3
RB4
RB0<-R4/R3RS0
RB0<-R4/R3 )3(
RB2
R4+50R3<-MEM)RB1(
ok RB4<-R4+RB2
R1<-R2/R3M0
RB2<-MEM)RB1(
RB3
(1)
RS2R2<-R4+R3 RS1
RB3<-RB0/RB2 W
43
Instruction Q
MOBRSROB
Execute
Retire
RATR1
R2
R3
R4
R3<-R2-R3R2<-R4+R3R1<-R2/R3
R3<-MEM)R4+50(
R2<-R4/R3
R2<-R4/R3
RB4
RB0<-R4/R3RS0
RB0<-R4/R3 )4(
RB5
R4+50R3<-MEM)RB1(
ok RB4<-R4+RB2
R1<-R2/R3M0
RB2<-MEM)RB1(
RB3
(2)
RS2R2<-R4+R3 RS1
RB3<-RB0/RB2 W
R3<-R2-R3
RB5<-RB4-RB2
RS3
W
44
Instruction Q
MOBRSROB
Execute
Retire
RATR1
R2
R3
R4
R3<-R2-R3R2<-R4+R3R1<-R2/R3
R3<-MEM)R4+50(
R2<-R4/R3
R2<-R4/R3
RB4
RB5
R4+50R3<-MEM)RB1(
ok
R1<-R2/R3
RB3
RS2R2<-R4+R3
RB3<-RB0/RB2
R3<-R2-R3
RB5<-RB4-RB2
RS3
ok
ok
RB3<-RB0/RB2 )1(RB4<-R4+RB2
RB4<-R4+RB2
RS1 W
45
Instruction Q
MOBRSROB
Execute
Retire
RATR1
R2
R3
R4
R3<-R2-R3R2<-R4+R3R1<-R2/R3
R3<-MEM)R4+50(
R2<-R4/R3
RB4
RB5
R1<-R2/R3 RS2R2<-R4+R3
RB3<-RB0/RB2
R3<-R2-R3ok
RB3<-RB0/RB2 )2(
R2<-RB0
R3<-RB2
RB3
R2<-R4/R3R4+50
R3<-MEM)RB1(okok
ok
RB5<-RB4-RB2
RS3
RB5<-RB4-RB2
46
Instruction Q
MOBRSROB
Execute
Retire
RATR1
R2
R3
R4
R3<-R2-R3R2<-R4+R3R1<-R2/R3
R3<-MEM)R4+50(
R2<-R4/R3
RB4
RB5
R1<-R2/R3 RS2R2<-R4+R3
RB3<-RB0/RB2
R3<-R2-R3ok
RB3<-RB0/RB2 )3(
ok
RB3
47
Instruction Q
MOBRSROB
Execute
Retire
RATR1
R2
R3
R4
R3<-R2-R3R2<-R4+R3R1<-R2/R3
R3<-MEM)R4+50(
R2<-R4/R3
RB4
RB5
R1<-R2/R3 RS2R2<-R4+R3
RB3<-RB0/RB2
R3<-R2-R3ok
RB3<-RB0/RB2 )4(
ok
RB3
48
Instruction Q
MOBRSROB
Execute
Retire
RATR1
R2
R3
R4
R3<-R2-R3R2<-R4+R3R1<-R2/R3
R3<-MEM)R4+50(
R2<-R4/R3
RB4
RB5
R1<-R2/R3
R2<-R4+R3R3<-R2-R3
okok
ok
RB3
49
Instruction Q
MOBRSROB
Execute
Retire
RATR1
R2
R3
R4
R3<-R2-R3R2<-R4+R3R1<-R2/R3
R3<-MEM)R4+50(
R2<-R4/R3
R1<-R2/R3
R2<-R4+R3R3<-R2-R3
R1<-RB3 R2<-RB4 R3<-RB5
okok
ok
50
Instruction Q
MOBRSROB
Execute
Retire
RATR1
R2
R3
R4
R3<-R2-R3R2<-R4+R3R1<-R2/R3
R3<-MEM)R4+50(
R2<-R4/R3