1 oooe. 2 כיצד ניתן לשפר את ביצועי המערכת ב-pipeline של mips אותו...

Post on 20-Dec-2015

230 Views

Category:

Documents

7 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

top related