Out Of Order Execution (Part 1) Updated by Franck Sala.

Slides:



Advertisements
Similar presentations
Tor Aamodt EECE 476: Computer Architecture Slide Set #6: Multicycle Operations.
Advertisements

Final Project : Pipelined Microprocessor Joseph Kim.
COMP25212 Further Pipeline Issues. Cray 1 COMP25212 Designed in 1976 Cost $8,800,000 8MB Main Memory Max performance 160 MFLOPS Weight 5.5 Tons Power.
Computer Architecture Lecture 2 Abhinav Agarwal Veeramani V.
Computer Structure 2014 – Out-Of-Order Execution 1 Computer Structure Out-Of-Order Execution Lihu Rappoport and Adi Yoaz.
Quiz 4 Solution. n Frequency = 2.5GHz, CLK = 0.4ns n CPI = 0.4, 30% loads and stores, n L1 hit =0, n L1-ICACHE : 2% miss rate, 32-byte blocks n L1-DCACHE.
1 Advanced Computer Architecture Limits to ILP Lecture 3.
Instruction Set Issues MIPS easy –Instructions are only committed at MEM  WB transition Other architectures are more difficult –Instructions may update.
CML CML CS 230: Computer Organization and Assembly Language Aviral Shrivastava Department of Computer Science and Engineering School of Computing and Informatics.
Lecture 6: Pipelining MIPS R4000 and More Kai Bu
Instruction-Level Parallelism (ILP)
1 RISC Pipeline Han Wang CS3410, Spring 2010 Computer Science Cornell University See: P&H Chapter 4.6.
Computer Architecture - Test A, answers Answer 1 addi$1,$zero,1addi$2,$zero,2 addi$3,$zero,3beq$8,$1,c1 beq$8,$2,c2 bne$8,$3,End addi$6,$6,1j End c1:addi.
ENEE350 Ankur Srivastava University of Maryland, College Park Based on Slides from Mary Jane Irwin ( )
The Optimum Pipeline Depth for a Microprocessor Fang Pang Oct/01/02.
EECS 470 Pipeline Hazards Lecture 4 Coverage: Appendix A.
Review CSE 4711 Computer Design and Organization Architecture = Design + Organization + Performance Topics in this class: –Central processing unit: deeply.
Review of CS 203A Laxmi Narayan Bhuyan Lecture2.
COMP381 by M. Hamdi 1 Pipelining Control Hazards and Deeper pipelines.
COMP381 by M. Hamdi 1 (Recap) Control Hazards. COMP381 by M. Hamdi 2 Control (Branch) Hazard A: beqz r2, label B: label: P: Problem: The outcome.
Appendix A Pipelining: Basic and Intermediate Concepts
Computer Architecture 2010 – Out-Of-Order Execution 1 Computer Architecture Out-Of-Order Execution Lihu Rappoport and Adi Yoaz.
Lec17.1 °For in-order pipeline, 2 options: Freeze pipeline in Mem stage (popular early on: Sparc, R4000) IF ID EX Mem stall stall stall … stall Mem Wr.
ENGS 116 Lecture 51 Pipelining and Hazards Vincent H. Berk September 30, 2005 Reading for today: Chapter A.1 – A.3, article: Patterson&Ditzel Reading for.
1.3B MULTIPLYING AND DIVIDING INTEGERS I can multiply and divide integers to solve problems involving integers.
Architecture Basics ECE 454 Computer Systems Programming
Add , Subtract, Multiply, Divide.
Memory/Storage Architecture Lab Computer Architecture Pipelining Basics.
Multiplying and Dividing Integers When you MULTIPLY: Two positives equal a positive Two negatives equal a positive One positive & one negative equal.
CDA 3101 Discussion Section 09 CPU Performance. Question 1 Suppose you wish to run a program P with 7.5 * 10 9 instructions on a 5GHz machine with a CPI.
Computer Organization and Architecture Tutorial 1 Kenneth Lee.
The University of Adelaide, School of Computer Science
Computer Architecture: Wrap-up CENG331 - Computer Organization Instructors: Murat Manguoglu(Section 1) Erol Sahin (Section 2 & 3) Adapted from slides of.
CS /02 Semester II Help Session IIA Performance Measures Colin Tan S
UltraSPARC III Hari P. Ananthanarayanan Anand S. Rajan.
11 Pipelining Kosarev Nikolay MIPT Oct, Pipelining Implementation technique whereby multiple instructions are overlapped in execution Each pipeline.
Adapted from Computer Organization and Design, Patterson & Hennessy, UCB ECE232: Hardware Organization and Design Part 13: Branch prediction (Chapter 4/6)
CMPE 421 Parallel Computer Architecture Part 3: Hardware Solution: Control Hazard and Prediction.
Out-of-order execution Lihu Rappoport 11/ MAMAS – Computer Architecture Out-Of-Order Execution Dr. Lihu Rappoport.
EECS 370 Discussion 1 Calvin and Hobbes by Bill Watterson.
Computer Organization
Lecture 07: Pipelining Multicycle, MIPS R4000, and More
Lecture: Pipelining Basics
Morgan Kaufmann Publishers The Processor
Chapter 4 The Processor Part 2
Computer Architecture Lecture 3 – Part 1 11th May, 2006
Pipelining Multicycle, MIPS R4000, and More
Seoul National University
Operations with Integers
Branch statistics Branches occur every 4-6 instructions (16-25%) in integer programs; somewhat less frequently in scientific ones Unconditional branches.
CSC 4250 Computer Architectures
Data Hazards Data Hazard
The Processor Lecture 3.6: Control Hazards
Static vs. dynamic scheduling
Control unit extension for data hazards
An Introduction to pipelining
Instruction Execution Cycle
1-8 Multiplying and Dividing Integers
Multiplying Integers SAME SIGNS??? Answer will be POSITIVE. ex)
Overview What are pipeline hazards? Types of hazards
Pipeline Performance.
Pipelining: critical path, pipeline hazards Prof. Eric Rotenberg
pipelining: data hazards Prof. Eric Rotenberg
Control unit extension for data hazards
Pipelining Appendix A and Chapter 3.
Introduction to Computer Organization and Architecture
Control unit extension for data hazards
Operations with Integers
Seoul National University
Need to stall for one cycle.
Presentation transcript:

Out Of Order Execution (Part 1) Updated by Franck Sala

2 Execution of instructions with variable execution time The longest operation in the machine fixes the frequency Break long instruction in many short operations –Implement a pipeline in EXE –Not possible for all the instructions –Execution time of certain instruction is variable (load with cache miss…) –More pipe stages = bigger penalty on misprediction and more data hazards (CPI increase)

3 דוגמא IFID EX M1M2M3M4 MEMWB DIV Integer unit Multiply divider R1<-R1+4 R2<-R3*R3 R4<-R3+R4

4 דוגמא IFID EX M1M2M3M4 MEMWB DIV Integer unit Multiply divider R1<-R1+4 R2<-R3*R3 R4<-R3+R4 R1<-R1+4R2<-R3*R3

5 דוגמא IFID EX M1M2M3M4 MEMWB DIV Integer unit Multiply divider R1<-R1+4 R2<-R3*R3 R4<-R3+R4 R1<-R1+4 R2<-R3*R3R4<-R3+R4

6 דוגמא IFID EX M1M2M3M4 MEMWB DIV Integer unit Multiply divider R1<-R1+4 R2<-R3*R3 R4<-R3+R4 R1<-R1+4 R2<-R3*R3 R4<-R3+R4

7 דוגמא IFID EX M1M2M3M4 MEMWB DIV Integer unit Multiply divider R1<-R1+4 R2<-R3*R3 R4<-R3+R4 R1<-R1+4 R2<-R3*R3 R4<-R3+R4

8 דוגמא IFID EX M1M2M3M4 MEMWB DIV Integer unit Multiply divider R1<-R1+4 R2<-R3*R3 R4<-R3+R4 R2<-R3*R3 R4<-R3+R4

9 דוגמא IFID EX M1M2M3M4 MEMWB DIV Integer unit Multiply divider R1<-R1+4 R2<-R3*R3 R4<-R3+R4 R2<-R3*R3 R4<-R3+R4

10 דוגמא IFID EX M1M2M3M4 MEMWB DIV Integer unit Multiply divider R1<-R1+4 R2<-R3*R3 R4<-R3+R4 R2<-R3*R3 R4<-R3+R4

11 דוגמא IFID EX M1M2M3M4 MEMWB DIV Integer unit Multiply divider R1<-R1+4 R2<-R3*R3 R4<-R3+R4 R2<-R3*R3R4<-R3+R4

12 Execution of instructions with variable execution time Allow instructions of different pipelines to be executed Out of Order –Execute many independent instructions in parallel in different pipelines –Execution must keep correctness of the code –Improve CPI

13 דוגמא IFID EX M1M2M3M4 MEMWB DIV Integer unit Multiply divider R1<-R1+4 R2<-R3*R3 R4<-R3+R4 R1<-R1+4R2<-R3*R3

14 דוגמא IFID EX M1M2M3M4 MEMWB DIV Integer unit Multiply divider R1<-R1+4 R2<-R3*R3 R4<-R3+R4 R1<-R1+4 R2<-R3*R3R4<-R3+R4

15 דוגמא IFID EX M1M2M3M4 MEMWB DIV Integer unit Multiply divider R1<-R1+4 R2<-R3*R3 R4<-R3+R4 R1<-R1+4 R2<-R3*R3 R4<-R3+R4

16 דוגמא IFID EX M1M2M3M4 MEMWB DIV Integer unit Multiply divider R1<-R1+4 R2<-R3*R3 R4<-R3+R4 R1<-R1+4 R2<-R3*R3 R4<-R3+R4

17 דוגמא IFID EX M1M2M3M4 MEMWB DIV Integer unit Multiply divider R1<-R1+4 R2<-R3*R3 R4<-R3+R4 R2<-R3*R3 R4<-R3+R4

18 דוגמא IFID EX M1M2M3M4 MEMWB DIV Integer unit Multiply divider R1<-R1+4 R2<-R3*R3 R4<-R3+R4 R2<-R3*R3 R4<-R3+R4

19 דוגמא IFID EX M1M2M3M4 MEMWB DIV Integer unit Multiply divider R1<-R1+4 R2<-R3*R3 R4<-R3+R4 R2<-R3*R3

20 דוגמא IFID EX M1M2M3M4 MEMWB DIV Integer unit Multiply divider R1<-R1+4 R2<-R3*R3 R4<-R3+R4 R2<-R3*R3

21 CPI עניין נוסף: במכונות in order כמו שהכרנו עד היום ניתן (אם בכלל) להגיע ל-CPI מינימאלי של 1 גם בביצוע של OOOE יש את חסם זה אם נאפשר ביצוע מקביל רק של שלב ה-EXE. אבל נאפשר גם בשאר השלבים ביצוע מספר הוראות במקביל אזי שנוכל לשבור את חסם זה. IF ID EXE MEM WB

22 תלויות מידע (data hazard) להזכירכם אנו מכירים כבר תלות מידע מסוג RAW: ADD R1,R2,R3 ADD R5,R6,R1 OOOE יוצרת תלויות מידע חדשות:  WAR – Write After Read DIV R1,R2,R3// many cycles ADD R5,R6,R1// depends on previous instruction ADD R6,R7,R8// WAR issue הוראת החילוק הארוכה מעכבת את הוראת החיבור העוקבת שממתינה לערך של R1, מכיוון שאנו מאפשרים ביצוע out of order ההוראה השלישית שלא מחכה לכלום תתבצע, ואז ההוראה השנייה לכשתתבצע עלולה לקרוא את הערך של R6 כפי שנכתב ע"י ההוראה השלישית ולא כפי שהתכוון המשורר (או המתכנת).

23  WAW – Write After Write : DIV R1,R2,R3// many cycles ADD R5,R6,R1// depends on previous instruction ADD R5,R7,R8// WAW issue גם כאן ההוראה השנייה מעוכבת ואילו השלישית לא, מה שעלול להתבצע הוא שההוראה השלישית תכתוב ל-R5 לפני ההוראה השנייה, ולבסוף כשהשנייה תכתוב גם כן, היא תשנה את ערך זה. בסופו של דבר, יחזיק R5 בערך לא עדכני.  תלויות אלו נקראות False Dependencies (כיוון שאם היה לרשות המהדר (קומפילר) מספר בלתי מוגבל של רגיסטרים היה יכול לבחור רגיסטרים שונים לכל פעולה ואז לא היו הפקודות תלויות אחת בשניה יותר)  בעיה נוספת שעוד לא הכרנו היא Structural Hazard, זהו מצב בו הוראה כלשהי נאלצת להמתין כי אין יחידת חישוב פנויה עבורה. למשל רצף פעולות חילוק עלול לגרום לכך.

24 Register Renaming דרך לפתור את בעיית התלויות החדשות היא ע"י Register Renaming. הרעיון: שמירת שתי מערכות רגיסטרים זאת אשר גלויה למשתמש (רגיסטרים ארכיטקטונים) ואשר בשימוש המהדר (שפת הסף), ומספר גדול של רגיסטרים פיזיים מתוך מאגר (pool) אנו מבצעים שני מיפויים: –האחד מהרגיסטרים הארכיטקטוניים לרגיסטרים הפיזיים לצורך פתירת בעיות תלויות מדומות.המיפוי הזה מבוצע במעבר בין שלב ה-decode לשלב הביצוע –והשני מהרגיסטרים הפיזיים לארכיטקטוניים לצורך שמירת "תמונת המכונה" כפי שהקומפילר בנה אותה. המיפוי הזה מבוצע כחלק מפעולת commit ומעבירים את הערך שלהם לרגיסטרים המקוריים ע"פ רוב, מעבדים מודרניים מבצעים את שלבי ה-commit וה- fetch- decode בסדר התוכנית (in order) ואילו את שלב הביצוע מבצעים out of order.

25 דוגמא: T0 T1 T2 T3 Tn R1 R2 R3 R4 WAR WAW buffer ציקלי DIV R1,R2,R3 ADD R2,R4,R1 ADD R2,R3,R3 ADD R4,R3,R2 Renamer Arch reg.. Temp reg..

26 דוגמא: T0 T1 T2 T3 Tn R1 R2 R3 R4 T0 R2/R3 DIV R1,R2,R3 ADD R2,R4,R1 ADD R2,R3,R3 ADD R4,R3,R2 Renamer Arch reg.. Temp reg..

27 דוגמא: T0 T1 T2 T3 Tn R1 R2 R3 R4 DIV R1,R2,R3 ADD R2,R4,R1 ADD R2,R3,R3 ADD R4,R3,R2 T0 R2/R3 R4+T0 T1 Renamer Arch reg.. Temp reg..

28 דוגמא: T0 T1 T2 T3 Tn R1 R2 R3 R4 DIV R1,R2,R3 ADD R2,R4,R1 ADD R2,R3,R3 ADD R4,R3,R2 T0 R2/R3 R4+T0 T2 R3+R3 Renamer Arch reg.. Temp reg..

29 דוגמא: T0 T1 T2 T3 Tn R1 R2 R3 R4 DIV R1,R2,R3 ADD R2,R4,R1 ADD R2,R3,R3 ADD R4,R3,R2 T0 R2/R3 R4+T0 T2 R3+R3 R3+T2 T3 שים לב: כעת אין תלויות מסוג False Dependencies אבל RAW עדיין קיים Renamer Arch reg.. Temp reg..

30 ROB (reorder Buffer) דרך נפוצה למימוש הדבר היא ע"י ROB, שהוא חוצץ המקבל את ההוראות משלב ה-decode ע"פ הסדר, הכניסה התאימה ב-ROB מהווה את מספר הרגיסטר הזמני בשלב ה-EXE נכתבת התוצאה לכניסה המתאימה ב-ROB וההוראות מבצעות את שלב ה-commit ע"פ הסדר שלהן ב-ROB – הוראה יכולה לבצע commit רק אם זו שלפניה עשתה זאת.

Structures RS RAT / Alloc IDQ #phys reg(1 bit) EAX37RRF EBX19ROB ECX23ROB vsrc1vsrc2Pdst add197H112H37 sub0rob37133H38 RRF: 0EAX97H # Data Valid DataDST 19VV12HEBX 23VV33HECX 37VIxxxEAX 38IxxxxEAX Dest. Arch Reg 4 wr. ports Dest. Phys Reg 4 wr. Ports 1 per uop Arch reg: value from RRF Phys reg valid: value from ROB Phys ref not valid: wait for value Source & dest values updated after EXE

32 P6 כדוגמא ל-OOO ניקח את מכונת ה-P6 שממומשת במעבדי Pentium2 ו- Pentium3 במכונה זו ההוראות מסוג CISC נכנסות לשלב ה-decode ע"פ הסדר שם הן מפורקות להוראות פנימיות הנקראות uops מסוג RISC הוראות אלו מתבצעות בשלב ה-EXE out-of-order לבסוף בשלב ה-commit (retire) ה-uops מחוברים בחזרה להוראות ה- CICS ע"פ הסדר המקורי של ההוראות המכונה גם משתמשת ב-register renaming הממומש ע"י ROB

33 דוגמא 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

RS example 34 Instruction Q MOB RS Execute Retire RAT R1 R2 R3 R4 R3<-R2-R3 R2<-R4+R3 R1<-R2/R3 R3<-MEM(R4+50) R2<-R4/R3 Arch Reg. RF1 RF2 RF3 ROB Phys. Reg. # Val id Data Valid DataDST IxxxxX Ix X Ix X Ix X Ix X Ix X Ix X Ix X vsrc1vsrc2Pdst add197H112H37 sub0rob37133H38

35 Instruction Q MOB RS ROB Execute Retire RAT R1 R2 R3 R4 R3  R2-R3 R2  R4+R3 R1  R2/R3 R3  MEM(R4+50) R2  R4/R3 Arch Reg. Phys. Reg. RF1 RF2 RF3 # Val id Data Valid DataDST 0xxxxX

36 Instruction Q MOB RS Execute Retire RAT R1 R2 R3 R4 RB0 RB0  R4/R3 Arch Reg. Phys. Reg. RF1 RF2 RF3 R3  R2-R3 R2  R4+R3 R1  R2/R3 R3  MEM(R4+50) R2  R4/R3 ROB Comment Valid Data Valid DataDST R2  R4/R3 10xxxR

37 Instruction Q MOB RS Execute Retire RAT R1 R2 R3 R4 RB0 RB0  R4/R3 RB0  R4/R3 (1) RB1 Mob  R4+50 RB1  MEM(not rdy) Arch Reg. RF1 RF3 R3  R2-R3 R2  R4+R3 R1  R2/R3 R3  MEM(R4+50) R2  R4/R3 ROB Comment Valid Data Valid DataDST R2  R4/R3 10xxxR2 R3  MEM(r4+50) 1 0xxxR

38 Instruction Q MOB RS Execute Retire RAT R1 R2 R3 R4 RB0 RB0  R4/R3 RB0  R4/R3 (2) RB1 Mob  R4+50 RB1  MEM(not Rdy) RB2 Mob  R4+50 W RB2  RB0/RB1 Arch Reg. RF3 R3  R2-R3 R2  R4+R3 R1  R2/R3 R3  MEM(R4+50) R2  R4/R3 ROB Comment Valid Data Valid DataDST R2  R4/R3 10xxxR2 R3  MEM(r4+50) 1 0xxxR3 R1  R2 / R3 1 0xxxR

39 Instruction Q MOB RS Execute Retire RAT R1 R2 R3 R4 RB3 RB0  R4/R3 RB0  R4/R3 (3) RB1 RB3  R4+RB1 RB1  MEM(R4+50) RB2 (1) RB2  RB0/RB1 W Arch Reg. RF3 R3  R2-R3 R2  R4+R3 R1  R2/R3 R3  MEM(R4+50) R2  R4/R3 ROB Comment Valid Data Valid DataDST R2  R4/R3 10xxxR2 R3  MEM(r4+50) 1 0xxxR3 R1  R2 / R3 1 0xxxR1 R2  R4 + R3 1 0xxxR

40 Instruction Q MOB RS Execute Retire RAT R1 R2 R3 R4 RB3 RB0  R4/R3 RB0  R4/R3 (4) RB4 RB3  R4+RB1 RB1  MEM(R4+50) RB2 (2) RB2  RB0/RB1 W RB4  RB3-RB1 W Arch Reg. RF3 R3  R2-R3 R2  R4+R3 R1  R2/R3 R3  MEM(R4+50) R2  R4/R3 ROB Comment Valid Data Valid DataDST R2  R4/R3 10xxxR2 R3  MEM(r4+50) 1 0xxxR3 R1  R2 / R3 1 0xxxR1 R2  R4 + R3 1 0xxxR2 R3  R2 – R3 1 0xxxR

41 Instruction Q MOB RS Execute Retire RAT R1 R2 R3 R4 RB3 RB4 RB2 RB2  RB0/RB1 RB4  RB3-RB1 RB2  RB0/RB1 (1) RB3  R4+RB1 W Arch Reg. RF3 R3  R2-R3 R2  R4+R3 R1  R2/R3 R3  MEM(R4+50) R2  R4/R3 ROB Comment Valid Data Valid DataDST R2  R4/R3 11 Value2 R2 R3  MEM(r4+50) 1 1 Value3 R3 R1  R2 / R3 1 0xxxR1 R2  R4 + R3 1 0xxxR2 R3  R2 – R3 1 0xxxR

42 Instruction Q MOB RS RAT R1 R2 R3 R4 RB3 RB4 RB2  RB0/RB1 RB2  RB0/RB1 (2) R2  RB0 R3  RB1 RB2 RB4  RB3-RB1 Arch Reg. RF3 R3  R2-R3 R2  R4+R3 R1  R2/R3 R3  MEM(R4+50) R2  R4/R3 Execute Retire ROB Comment Valid Data Valid DataDST R2  R4/R3 11 Value2 R2 R3  MEM(r4+50) 1 1 Value3 R3 R1  R2 / R3 1 0xxxR1 R2  R4 + R3 1 1 Value4 R2 R3  R2 – R3 1 0xxxR

43 Instruction Q MOB RS RAT R1 R2 R3 R4 RB3 RB4 RB2  RB0/RB1 RB2  RB0/RB1 (3) RB2 Arch Reg. RF3 R3  R2-R3 R2  R4+R3 R1  R2/R3 R3  MEM(R4+50) R2  R4/R3 Execute Retire ROB Comment Valid Data Valid DataDST R2  R4/R3 0 R3  MEM(r4+50) 1 1 Value3 R3 R1  R2 / R3 1 0xxxR1 R2  R4 + R3 1 1 Value4 R2 R3  R2 – R3 1 1 Value5 R

44 Instruction Q MOB RS RAT R1 R2 R3 R4 RB3 RB4 RB2  RB0/RB1 RB2  RB0/RB1 (4) RB2 Arch Reg. RF3 R3  R2-R3 R2  R4+R3 R1  R2/R3 R3  MEM(R4+50) R2  R4/R3 Execute Retire ROB Comment Valid Data Valid DataDST R2  R4/R3 0 R3  MEM(r4+50) 0 R1  R2 / R3 1 0xxxR1 R2  R4 + R3 1 1 Value4 R2 R3  R2 – R3 1 1 Value5 R

45 Instruction Q MOB RS RAT R1 R2 R3 R4 RB3 RB4 RB2 Arch Reg. RF3 R3  R2-R3 R2  R4+R3 R1  R2/R3 R3  MEM(R4+50) R2  R4/R3 Execute Retire ROB Comment Valid Data Valid DataDST R2  R4/R3 0 R3  MEM(r4+50) 0 R1  R2 / R3 1 1 Value6 R1 R2  R4 + R3 1 1 Value4 R2 R3  R2 – R3 1 1 Value5 R

46 Instruction Q MOB RS RAT R1 R2 R3 R4 R1  RB2R2  RB3R3  RB4 Arch Reg. RF3 R3  R2-R3 R2  R4+R3 R1  R2/R3 R3  MEM(R4+50) R2  R4/R3 Execute Retire ROB Comment Valid Data Valid DataDST R2  R4/R3 0 R3  MEM(r4+50) 0 R1  R2 / R3 1 1 Value6 R1 R2  R4 + R3 1 1 Value4 R2 R3  R2 – R3 1 1 Value5 R

47 Instruction Q MOB RS RAT R1 R2 R3 R4 Arch Reg. RF3 R3  R2-R3 R2  R4+R3 R1  R2/R3 R3  MEM(R4+50) R2  R4/R3 Execute Retire ROB Comment Valid Data Valid DataDST R2  R4/R3 0 R3  MEM(r4+50) 0 R1  R2 / R3 0 R2  R4 + R3 0 R3  R2 – R RF1 RF2

Backup 48

49 כיצד ניתן לשפר את ביצועי המערכת ב-pipeline של MIPS אותו למדנו זה מכבר, הייתה יחידת ALU בודדת שדאגה לביצוע כל הפעולות (שלב ה-EXE) הבעיה: ישנן פעולות כבדות יותר וכבדות פחות – למשל חיבור שלמים יהיה קל יותר מפעולת חילוק. מכיוון שמחזור השעון אמור להספיק לביצוע כל פעולה הרי שבעקבות הפעולות הכבדות נקבל מחזור שעון ארוך – פגיעה בביצועים.

50 פתרון 1 נאפשר רק ביצוע הוראות פשוטות שלוקחות זמן קצר, והוראות כבדות יפורקו למספר הוראות פשוטות (מעבדי ה- RISC הראשונים היו כאלה) חסרונות: ישנן פעולות כגון חישובי floating-point אשר קשה לפרק אותם לחלקים בעלי זמן ביצוע שווה ישנן פעולות כגון גישה לזיכרון שזמן הביצוע (גישה) אינו קבוע (תלוי בעומס על ה- bus) או משתנה מדור לדור

51 פתרון 2 נהפוך את שלב ה-EXE ל - pipeline (או ל-multicycle) כך הוראה כבדה תתבצע במספר שלבים ונוכל לשמור על מחזור שעון קטן חסרונות: לא ברור שתמיד נוכל לפרק הוראה כבדה לשלבי pipeline הוספת שלבים מגדילה את ה -penalty שאנו משלמים על חיזויים שגויים וכן יוצרת בעיות עם תלויות המידע (data hazard) – אמנם נקטין את מחזור השעון אבל אנו עלולים לפגוע ב-CPI.

52 פתרון 3 נבנה pipeline שונה לפקודות בעלות זמן ביצוע שונה נאפשר להוראות מ-pipeline שונה להסתיים שלא ע"פ סדר הופעתן בקוד –קרי, כל עוד התוכנית שומרת על נכונותה, נאפשר לפקודה שמופיעה בקוד מאוחר יותר להסתיים לפני שפקודה שקדמה לה מסתיימת שיטה זאת מאפשרת ביצוע של מספר הוראות במקביל: – כל עוד שייכות ל-pipeline שונה –כל עוד אינן תלויות אחת בשניה. כך נוכל לשפר את ה-CPI של המכונה ובכך לשפר ביצועים.

53 Fetch & Decode EXE Retire (commit) In-order (out-of-order) מקום להוראה הבאה הוראה הבאה שמבצעת commit

54 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 I D RAT R S L2 DCU ROB OOOE – The P6 Example