תרגול מס' 3: Data Hazards מבוסס על תרגול של מורן גביש

Slides:



Advertisements
Similar presentations
Completeness and Expressiveness. תזכורת למערכת ההוכחה של לוגיקה מסדר ראשון : אקסיומות 1. ) ) (( 2. )) ) (( )) ( ) ((( 3. ))) F( F( ( 4. ) v) ( ) v ((
Advertisements

Pipeline Example: cycle 1 lw R10,9(R1) sub R11,R2, R3 and R12,R4, R5 or R13,R6, R7.
Pipeline MIPS תרגול כיתה מס' 12. דוגמה 1 הסבירו איזה מעקף (bypass/forwarding) דרוש ב- pipeline בכדי לבצע את התכנית הבאה: add$2,$3,$4 add$4,$5,$6 add$5,$3,$4.
רקורסיות נושאי השיעור פתרון משוואות רקורסיביות שיטת ההצבה
Review: MIPS Pipeline Data and Control Paths
Tutorial #13 Solving MIPS Exam Problems 20: © Dima Elenbogen 2010, Technion 1.
ENEE350 Ankur Srivastava University of Maryland, College Park Based on Slides from Mary Jane Irwin ( )
©UCB CS 162 Computer Architecture Lecture 3: Pipelining Contd. Instructor: L.N. Bhuyan
1 Stalling  The easiest solution is to stall the pipeline  We could delay the AND instruction by introducing a one-cycle delay into the pipeline, sometimes.
Solving MIPS Exam Problems 21: © Dima Elenbogen 2010, Technion 1.
Multicycle MIPS תרגול כיתה מס' 13.
Multi-Cycle MIPS דוגמאות. דוגמה 1 נתון קטע הקוד הבא: begin:addi $v0, $zero, -1 loop:add $a0, $a0, $a0 addi$v0,$v0,1 bne $a0, $zero, loop הניחו כי בתחילת.
Tutorial #13 Solving MIPS Exam Problems 01: © Dima Elenbogen 2010, Technion 1.
1 השעון Hertz=1/sec מחשב פנטיום במהירות של פירושו שהוא מבצע 8^10 *2 מחזורי שעון בשניה. כל מחזור שעון לוקח 200MHZ 5*10^-9=5nanosecond כמה לוקחת פקודה בימינו?
1 שלבי ביצוע הוראת מכונה (1) FETCH = קרא הוראה מהזיכרון ע " פ הכתובת שמכיל ה -PC. (2) DECODE = פענח את הפקודה וקרא את האוגרים הנחוצים ( אחד או שניים ).
Pipeline MIPS תרגול כיתה מס' 12. דוגמא 1 עקבו אחר אותות הבקרה המופיעים בשקף הבא. נסו לפענח מהו קטע הקוד הרץ על המחשב ברגע זה?
Computer Architecture - A Pipelined Datapath A Pipelined Datapath  Resisters are used to save data between stages. 1/14.
שלבי ביצוע הוראת מכונה (1) FETCH = קרא הוראה מהזיכרון ע " פ הכתובת שמכיל ה -PC. (2) DECODE = פענח את הפקודה וקרא את האוגרים הנחוצים ( אחד או שניים ). (3)
1 ׃1998 Morgan Kaufmann Publishers פקודת ה- jump 4 bits 26 bits 2 bits 00 : כתובת קפיצה במילים : כתובת קפיצה בבתים … …
1 Stalls and flushes  So far, we have discussed data hazards that can occur in pipelined CPUs if some instructions depend upon others that are still executing.
Supplementary notes for pipelining LW ____,____ SUB ____,____,____ BEQ ____,____,____ ; assume that, condition for branch is not satisfied OR ____,____,____.
Pipeline Data Hazards: Detection and Circumvention Adapted from Computer Organization and Design, Patterson & Hennessy, © 2005, and from slides kindly.
CPE432 Chapter 4B.1Dr. W. Abu-Sufah, UJ Chapter 4B: The Processor, Part B-2 Read Section 4.7 Adapted from Slides by Prof. Mary Jane Irwin, Penn State University.
CMPE 421 Parallel Computer Architecture Part 2: Hardware Solution: Forwarding.
CSE431 L07 Overcoming Data Hazards.1Irwin, PSU, 2005 CSE 431 Computer Architecture Fall 2005 Lecture 07: Overcoming Data Hazards Mary Jane Irwin (
CSIE30300 Computer Architecture Unit 05: Overcoming Data Hazards Hsin-Chou Chi [Adapted from material by and
PC Instruction Memory Address Instr. [31-0] 4 Fig 4.6 p 309 Instruction Fetch.
CDA 3101 Summer 2003 Introduction to Computer Organization Pipeline Control And Pipeline Hazards 17 July 2003.
Datapath and Control AddressInstruction Memory Write Data Reg Addr Register File ALU Data Memory Address Write Data Read Data PC Read Data Read Data.
CPE432 Chapter 4B.1Dr. W. Abu-Sufah, UJ Chapter 4B: The Processor, Part B-1 Read Sections 4.7 Adapted from Slides by Prof. Mary Jane Irwin, Penn State.
Spr 2016, Mar 9... ELEC / Lecture 7 1 ELEC / Computer Architecture and Design Spring 2016 Pipeline Control and Performance.
CSE 340 Computer Architecture Spring 2016 Overcoming Data Hazards.
Single-cycle CPU Control
Access the Instruction from Memory
Single Cycle CPU - Control
Stalling delays the entire pipeline
Note how everything goes left to right, except …
CDA 3101 Spring 2016 Introduction to Computer Organization
Computer Architecture
Test 2 review Lectures 5-10.
Single Cycle Processor
ECS 154B Computer Architecture II Spring 2009
\course\cpeg323-08F\Topic6b-323
Test 2 review Lectures 5-10.
Forwarding Now, we’ll introduce some problems that data hazards can cause for our pipelined processor, and show how to handle them with forwarding.
Review: MIPS Pipeline Data and Control Paths
Morgan Kaufmann Publishers The Processor
SOLUTIONS CHAPTER 4.
CS/COE0447 Computer Organization & Assembly Language
Single-cycle datapath, slightly rearranged
ELEC / Computer Architecture and Design Spring Pipelining (Chapter 6)
CSCI206 - Computer Organization & Programming
Systems Architecture II
\course\cpeg323-05F\Topic6b-323
Data Hazards Data Hazard
Pipeline control unit (highly abstracted)
The Processor Lecture 3.6: Control Hazards
The Processor Lecture 3.3: Single-cycle Implementation
The Processor Lecture 3.5: Data Hazards
Pipeline control unit (highly abstracted)
Pipeline Control unit (highly abstracted)
Introduction to Computer Organization and Architecture
Pipelining - 1.
Stalls and flushes Last time, we discussed data hazards that can occur in pipelined CPUs if some instructions depend upon others that are still executing.
The Processor: Datapath & Control.
MIPS Pipelined Datapath
©2003 Craig Zilles (derived from slides by Howard Huang)
Pipelined datapath and control
ELEC / Computer Architecture and Design Spring 2015 Pipeline Control and Performance (Chapter 6) Vishwani D. Agrawal James J. Danaher.
CS/COE0447 Computer Organization & Assembly Language
Presentation transcript:

תרגול מס' 3: Data Hazards מבוסס על תרגול של מורן גביש מבנה מחשבים ספרתיים 234267 תרגול מס' 3: Data Hazards מבוסס על תרגול של מורן גביש Last update: Nov 15th 2005 Quite a short tutorial. Some exercises could be added. (C) Yohai Devir 234267 - November 2005

ADD $1 $2 $3 (R1  R2 + R3) ADD $4 $1 $5 (R4  R1 + R5) קטע קוד זה יוצר Data Hazard (תלות מידע) מסוג RAW (read after write). בעיית ה- Data Hazard נוצרת כשפקודה הנמצאת בשלב ה- ID קוראת ערך של רגיסטר שפקודה קודמת לה, הנמצאת בשלב ה- EX ,MEM או WB צריכה לעדכן ועדיין לא כתבה את העדכון לתוך ה- RF. בעיית ה- RAW Data Hazard יכולה להיווצר בין פקודות ב- pipelined MIPS, שקיים בינן הפרש של לכל היותר שתי פקודות. (C) Yohai Devir 234267 - November 2005

R1 new value is still being processed IF/ID ID/EX WB EX M EX/MEM MEM/WB WB WB M R1 new value is still being processed Value that was read from R1 is the old one! Data Memory Read reg 1 ALU result Zero Read data 1 Read reg 2 Instruction Memory Read Address Write Address Register File Instruction Read data 2 Write reg Read Data m u x 1 Read Address Write data Write Data 32 ADD $1 $2 $3 ADD $4 $1 $5 ADD $1 $2 $3 Rd\Rt Rd\Rt ADD $4 $1 $5 ADD $1 $2 $3 (C) Yohai Devir 234267 - November 2005

פתרונות ל- Data Hazards stall הפתרון הפשוט ביותר הוא לבצע stall ל- pipeline. פעולה כזו תעכב את ריצת הפקודות התלויות עד לסיום הפקודה שמעדכנת את הרגיסטר. פתרון זה פוגע בביצועי ה- pipeline והינו בזבזני ביותר. (C) Yohai Devir 234267 - November 2005

(C) Yohai Devir 234267 - November 2005 IF/ID ID/EX EX/MEM MEM/WB Data Memory Read reg 1 ALU result Zero Read data 1 Read reg 2 Instruction Memory Read Address Write Address Register File Instruction Read data 2 Write reg Read Data m u x 1 Read Address Write data Write Data 32 ADD $1 $2 $3 ADD $4 $1 $5 ADD $1 $2 $3 ADD $4 $1 $5 ADD $1 $2 $3 ADD $4 $1 $5 ADD $1 $2 $3 ADD $4 $1 $5 Rd\Rt Rd\Rt ADD $1 $2 $3 ADD $4 $1 $5 (C) Yohai Devir 234267 - November 2005

פתרונות ל- Data Hazards (2) חציית RF) register File) אם קיים הפרש של שתי פקודות בין הפקודה הכותבת לפקודה הקוראת, אז הפקודה שכותבת לרגיסטר Rx נמצאת בשלב ה- WB כשהפקודה שקוראת מרגיסטר Rx נמצאת בשלב ה- ID. לפי השיטה הקודמת היינו צריכים לבצע stall יחיד ל- pipeline. פתרון יעיל יותר למקרה זה הוא חציית RF – הכתיבה ל- RF בשלב ה- WB מתבצעת בחצי הראשון של מחזור השעון והקריאה מ- RF בשלב ה- ID מתבצעת בחצי השני של מחזור השעון. (C) Yohai Devir 234267 - November 2005

(C) Yohai Devir 234267 - November 2005 IF/ID ID/EX EX/MEM MEM/WB Data Memory Read reg 1 ALU result Zero Read data 1 Read reg 2 Instruction Memory Read Address Write Address Register File Instruction Read data 2 Write reg Read Data m u x 1 Read Address Write data Write Data 32 ADD $1 $2 $3 ADD $4 $1 $5 ADD $1 $2 $3 ADD $4 $1 $5 ADD $1 $2 $3 ADD $4 $1 $5 ADD $1 $2 $3 ADD $4 $1 $5 Rd\Rt Rd\Rt ADD $1 $2 $3 (C) Yohai Devir 234267 - November 2005

פתרונות ל- Data Hazards (3) Forwarding / Bypassing שיטה זאת מסתמכת על העובדה הבאה: ערך רגיסטר המטרה של הפקודה הכותבת ידוע כבר בסוף שלב ה- EX שלה ונכתב ל- רגיסטר (EX\MEM (latch בסוף שלב זה. בסיום שלב ה- MEM ערך זה נכתב לרגיסטר MEM\WB ורק בשלב ה- WB נכתב הערך לרגיסטר המטרה. כלומר, נוכל להשתמש בערך רגיסטר המטרה לפני שערך זה נכתב בפועל לרגיסטר. (C) Yohai Devir 234267 - November 2005

פתרונות ל- Data Hazards (4) אם הפקודות שיש בינן RAW Data Hazard הן צמודות (והפקודה הראשונה איננה LW) אז הפקודה שכותבת לרגיסטר Rx נמצאת בשלב MEM כאשר הפקודה שקוראת מרגיסטר Rx נמצאת בשלב ה- EX (לאחר שכבר קראה ערך לא נכון של Rx בשלב ה- ID שלה). הפתרון למקרה זה הוא העברת התוכן החדש של רגיסטר Rx משלב MEM (של הפקודה הכותבת) לשלב EX (של הפקודה שמשתמשת בנתון) לכניסה המתאימה של ה- ALU. כלומר נבצע forwarding משלב ה- MEM לשלב ה- EX. אם הפקודה הראשונה (הכותבת לרגיסטר) היא פקודת LW, לא נוכל לבצע forwarding משלב ה- MEM לשלב ה- EX כי ערך רגיסטר המטרה ידוע רק בסוף שלב ה- MEM. לא נוכל לפתור בעיה זאת מבלי להשהות את ה- pipeline. הפקודה החדשה היא מסוג Immediate. ההבדל מפקודת addi הוא שפקודת addi מקבלת ערכים בטווח של 28 ± השינוי הנדרש: הכפלת ה- sign extend כך שתהיה גם הרחבה ע"י שרשור ערך ה- immediate ל- 16 אפסים הגדלת ה MUX שבורר את הכניסה ל- ALU ל MUX31, מה שמחייב קו בקרה נוסף ל- MUX זה ועל כן שינוי ברכיב ה- control. אין חשיבות איזה מה- 32 bit bus יחובר ל- ALU control שכן הוא קורא רק את 6 הביטים הימניים ביותר אבל לחישוב קפיצות יש צורך ב- sign extended 32bit bus ולכן נחבר את שני הרכיבים הנ"ל ל- bus זה. בנוסף יש לעדכן את ה- הלוגיקה שמשפיעה על alu control input, במקרה זה עדכון נוסף ברכיב ה- control כך שיזהה את ה- opcode החדש. (C) Yohai Devir 234267 - November 2005

Value that was read from R1 is the old one! IF/ID ID/EX WB EX M EX/MEM MEM/WB WB WB M Value that was read from R1 is the old one! Data Memory Read reg 1 ALU result Zero Read data 1 Read reg 2 Instruction Memory Read Address m u x 1 X Write Address Register File Instruction Read data 2 Write reg Read Data m u x 1 Read Address Write data Write Data ADD $4 $1 $5 32 ADD $1 $2 $3 ADD $4 $1 $5 ADD $1 $2 $3 ADD $4 $1 $5 LW $1 100($4) Rd\Rt ADD $4 $1 $5 Rd\Rt LW $1 100($4) (C) Yohai Devir 234267 - November 2005

פתרונות ל- Data Hazards (5) אם קיים הפרש של פקודה אחת בין הפקודות שיש בינן RAW Data Hazard אז הפקודה שכותבת לרגיסטר Rx נמצאת בשלב ה- WB כאשר הפקודה שקוראת מרגיסטר Rx נמצאת בשלב EX (לאחר שכבר קראה את הערך הישן של RX). הפתרון למקרה זה הוא העברת התוכן החדש של רגיסטר RX משלב ה- WB לשלב ה- EX לכניסה המתאימה של ה- ALU, כלומר נבצע forwarding משלב ה- WB לשלב ה- EX. מקרה זה כולל מצב בו קיים הפרש של פקודה אחת בין פקודת LOAD ופקודה אחרת ,שיש בינה לבין פקודת ה- LOAD RAW Data Hazard. (C) Yohai Devir 234267 - November 2005

Independent instruction Independent instruction IF/ID ID/EX WB EX M EX/MEM MEM/WB WB WB M Data Memory Read reg 1 ALU result Zero Read data 1 Read reg 2 Instruction Memory Read Address m u x 1 Write Address Register File Instruction Read data 2 Write reg Read Data m u x 1 Read Address Write data Write Data 32 Independent instruction ADD $1 $2 $3 ADD $4 $1 $5 ADD $4 $1 $5 Rd\Rt Independent instruction Rd\Rt LW $1 100($4) (C) Yohai Devir 234267 - November 2005

פתרונות ל- Data Hazards (6) תמיד נבצע את ה- forwarding מהפקודה האחרונה שכתבה לרגיסטר (ולכן במקרה ששתי הפקודות הקודמות כתבו לרגיסטר אותו צריך לקרוא, נבצע forwarding משלב ה- MEM ולא משלב ה- WB. זיהוי ומניעת RAW Data Hazard מתבצע ע"י forwarding unit אשר מקבלת את הנתונים הנדרשים לזיהוי RAW Data Hazard מהפקודה שבשלב ה- EX ומפקודות בשלבי WB ו-MEM. ה- forwarding unit מבצעת פיקוד על שני MUX -ים בכניסות המידע של ה- ALU. ע"מ לזהות אם קיים RAW Data Hazard בין פקודה בשלב MEM או WB לבין הפקודה בשלב EX, ה- forwarding unit חייבת לקבל את הנתונים הבאים: מהפקודה בשלבי MEM\WB: האם הפקודה כותבת בסוף ל- RF (RegWrite = 1) ולאיזה רגיסטר. מהפקודה בשלב ה- EX: מספרי רגיסטרי המקור של הפקודה. (C) Yohai Devir 234267 - November 2005

(C) Yohai Devir 234267 - November 2005 IF/ID ID/EX EX/MEM MEM/WB ALU Instruction Memory Read Address ALU result Zero Read data 1 Data Memory Read reg 1 Read reg 2 Write Address Register File m u x Instruction Write reg Read Data m u x 1 Read Address Read data 2 Write data Write Data 32 Forwarding unit (C) Yohai Devir 234267 - November 2005

פתרונות ל- Data Hazards (5) שימו לב לכך שלא חובה לבדוק אם Rt משמש את הפקודה כרגיסטר מקור או תוצאה מהסיבה הבאה: נניח שלמרות ש- Rt משמש את הפקודה הנוכחית בשלב EX לכתיבה ולא לקריאה, ה- forwarding unit תבצע בדיקה שלו מול רגיסטרי התוצאה של פקודות בשלב MEM ו- WB. נניח גם שאכן מתקיים שוויון בין מספר Rt של הפקודה בשלב EX לבין רגיסטר תוצאה של אחת הפקודות בשלב MEM או WB (או שתיהן יחד, זה לא משנה). במקרה זה ה- forwarding unit תבצע העברה של תוכן הרגיסטר החדש מהשלב המתאים דרך ה- MUX הבוחר בין תוכן הרגיסטר הנקרא בשלב ID לבין הערכים משלב WB או MEM. עפ"י השרטוט המפורט יותר בעמוד הבא, אפשר לראות שלאחר מכן נמצא MUX הבוחר בין Rt לבין Imm, ולכן אם הפקודה לא משתמשת ב- Rt לא Rt יעבור את ה- MUX הזה אלא Imm. לכן העברת הערך של Rt שהתבצעה ע"י ה- forwarding unit לא תשפיע על מה שבאמת ייכנס בכניסה התחתונה של ה- ALU. (C) Yohai Devir 234267 - November 2005

+ + (C) Yohai Devir ID/EX IF/ID EX/MEM MEM/WB 4 ALU PC Register File PCSrc m u x 1 ID/EX WB EX M IF/ID EX/MEM MEM/WB RegWrite Rd\Rt Rd\Rt Control WB WB M Shift left 2 + 4 + Branch MemWrite RegWrite MemRead ALUSrc Read reg 1 Read data 1 RegDst ALUop Data Memory m u x ALU result Zero MemtoReg Read reg 2 Instruction Memory m u x 1 Write Address PC Register File Instruction Write reg Read Data m u x 1 Read data 2 Read Address Read Address Write data m u x Write Data Sign extend ALU Control 6 [15-0] 16 32 m u x 1 [20-16] [15-11] RegDst Forwarding unit (C) Yohai Devir

דוגמא EX נסתכל על התכנית הבאה: SUB $2 $1 $3 AND $4 $2 $5 OR $8 $2 $6 LW $9 1000($4) <Any independent command> SLT $1 $6 $9 EX בין פקודה מס' 1 לפקודה מס' 2 נוצר RAW Data Hazard. נבצע forwarding משלב ה- MEM לשלב ה- EX כלומר נעביר את הערך המעודכן של רגיסטר R2 משלב ה-MEM של פקודה מספר 1 לכניסה העליונה של ה ALU בשלב ה EX של פקודה מס' 2. (C) Yohai Devir 234267 - November 2005

LW $9 1000($4) OR $8 $2 $6 AND $4 $2 $5 SUB $2 $1 $3 IF/ID ID/EX WB EX M EX/MEM MEM/WB WB WB M m u x Instruction Memory Read Address ALU result Zero Read data 1 Data Memory Read reg 1 Read reg 2 Write Address Register File m u x Instruction Write reg Read Data m u x 1 Read Address Read data 2 Write data Write Data New $2 32 Writes to $2 Forwarding unit $2 needed as 1st arg LW $9 1000($4) OR $8 $2 $6 AND $4 $2 $5 SUB $2 $1 $3

דוגמא (2) EX SUB $2 $1 $3 AND $4 $2 $5 OR $8 $2 $6 LW $9 1000($4) <Any independent command> SLT $1 $6 $9 EX בין פקודה מס' 1 לפקודה מס' 3 נוצר RAW Data Hazard. נבצע forwarding משלב ה- WB לשלב ה- EX כלומר נעביר את הערך המעודכן של רגיסטר R2 משלב ה- WB של פקודה מספר 1 לכניסה העליונה של ה ALU בשלב ה EX של פקודה מס' 3. (C) Yohai Devir 234267 - November 2005

Instruction LW $9 1000($4) OR $8 $2 $6 AND $4 $2 $5 SUB $2 $1 $3 IF/ID ID/EX WB EX M EX/MEM MEM/WB WB WB M m u x Instruction Memory Read Address ALU result Zero Read data 1 Data Memory Read reg 1 Read reg 2 Write Address Register File m u x Instruction Write reg Read Data m u x 1 Read Address Read data 2 Write data Write Data New $4 New $2 32 Writes to $4 Forwarding unit Writes to $2 $2 needed as 1st arg Instruction LW $9 1000($4) OR $8 $2 $6 AND $4 $2 $5 SUB $2 $1 $3

דוגמא (3) EX SUB $2 $1 $3 AND $4 $2 $5 OR $8 $2 $6 LW $9 1000($4) <Any independent command> SLT $1 $6 $9 EX בין פקודה מס' 2 לפקודה מס' 4 נוצר RAW Data Hazard. נבצע forwarding משלב ה- WB לשלב ה- EX כלומר נעביר את הערך המעודכן של רגיסטר R4 משלב ה- WB של פקודה מספר 2 לכניסה העליונה של ה ALU בשלב ה EX של פקודה מס' 4. (C) Yohai Devir 234267 - November 2005

Instruction SLT $1 $6 $9 LW $9 1000($4) OR $8 $2 $6 AND $4 $2 $5 IF/ID ID/EX WB EX M EX/MEM MEM/WB WB WB M m u x Instruction Memory Read Address ALU result Zero Read data 1 Data Memory Read reg 1 Read reg 2 Write Address Register File m u x Instruction Write reg Read Data m u x 1 Read Address Read data 2 Write data Write Data New $8 New $4 32 Writes to $8 Forwarding unit Writes to $4 $4 needed as 1st arg SLT $1 $6 $9 Instruction LW $9 1000($4) OR $8 $2 $6 AND $4 $2 $5

דוגמא (4) EX בין פקודה מס' 4 לפקודה מס' 6 נוצר RAW Data Hazard. SUB $2 $1 $3 AND $4 $2 $5 OR $8 $2 $6 LW $9 1000($4) <Any independent command> SLT $1 $6 $9 EX בין פקודה מס' 4 לפקודה מס' 6 נוצר RAW Data Hazard. נבצע forwarding משלב ה- WB לשלב ה- EX כלומר נעביר את הערך המעודכן של רגיסטר R9 משלב ה- WB של פקודה מספר 4 לכניסה התחתונה של ה ALU בשלב ה EX של פקודה מס' 6. המקרה המתואר בדוגמא הוא מקרה בו קיים הפרש של פקודה אחת בין פקודת LW לבין פקודה שצריכה את הערך שברגיסטר שאליו טוענת פקודת LW. (C) Yohai Devir 234267 - November 2005

Instruction LW $9 1000($4) SLT $1 $6 $9 IF/ID ID/EX EX/MEM MEM/WB ALU Memory Read Address ALU result Zero Read data 1 Data Memory Read reg 1 Read reg 2 Write Address Register File m u x Instruction Write reg Read Data m u x 1 Read Address Read data 2 Write data Write Data New $9 32 Forwarding unit Writes to $9 $9 needed as 2nd arg Instruction SLT $1 $6 $9 LW $9 1000($4)

המצב היותר בעייתי הוא כאשר אין מרווח בין פקודת ה- LOAD לפקודה הבאה אחריה LW $9, 1000($4) SLT $1 $6 $9 EX כעת נוצר מצב בו פקודת ה- LOAD צמודה לפקודה הצורכת את הרגיסטר שה- LW טוענת לתוכו (R9). במקרה זה הערך החדש של R9 מוכן רק בסוף שלב MEM של LW שזה גם סוף שלב EX של הפקודה שצריכה את הערך הזה (במקרה שלנו – SLT). זה המקרה היחיד בו לא נוכל לבצע forwarding של הערך המחושב וחייבים לעקב את ה- pipeline ע"י ביצוע stall. (C) Yohai Devir 234267 - November 2005

ע"מ לזהות אם יש צורך ב-stall ה- HDU צריכה לזהות את הדברים הבאים: בשביל לטפל במקרה הזה קיימת יחידת ה- HDU (Hazard Detection Unit). יחידה זו מבצעת stall בשלב ה- ID (לפקודת ה- SLT) ובכך מאפשרת לבצע forwarding משלב ה- WB לשלב ה- EX. ע"מ לזהות אם יש צורך ב-stall ה- HDU צריכה לזהות את הדברים הבאים: האם הפקודה שבשלב ה- EX היא אכן פקודת LW. אות הבקרה MemToReg מציין האם זאת פקודת LW. האם קיים RAW בין Rt של LW לבין אחד מרגיסטרי המקור של הפקודה בשלב ה- ID (שימו לב שכאן מוטב לזהות בוודאות האם הפקודה בשלב ID משתמשת ב- Rt כרגיסטר מקור או כרגיסטר תוצאה! – למה?) (C) Yohai Devir 234267 - November 2005

stall ל-PC ולבריח IF/ID כך שתוכנם לא ישתנה במחזור השעון הבא. יחידת ה-HDU שולטת ברגיסטר PC, בבריח (latch) IF/ID וב-MUX בעזרתו ניתן לאפס את אותות הבקרה. במקרה וה-HDU זיהתה את ה-RAW בין LW לבין הפקודה שאחריה היא מבצעת את הדברים הבאים: stall ל-PC ולבריח IF/ID כך שתוכנם לא ישתנה במחזור השעון הבא. נטרול הפקודה שבשלב ID כך שהיא לא תשפיע על מצב המעבד ולא תכתוב לזיכרון ול-RF. הנטרול מבוצע ע"י איפוס קווי הבקרה. פקודה עם קווי בקרה אפס הופכת להיות "בועה" (bubble). רק במחזור השעון הבא תשתחרר הפקודה האמיתית משלב ה-ID. (C) Yohai Devir 234267 - November 2005

+ HDU (C) Yohai Devir 234267 - November 2005 EX instruction write register Is EX Instruction LOAD? HDU Make ID instruction a bubble m u x 1 IF/ID ID/EX WB EX M EX/MEM MEM/WB m u x RegWrite Stall PC and IF/ID latch Control WB WB ID instruction’s source regs M 4 + m u x ALU result Zero Read data 1 Data Memory Read reg 1 Read reg 2 Instruction Memory Read Address Write Address PC Register File m u x Instruction Write reg Read Data m u x 1 Read Address Read data 2 Write data Write Data 32 Forwarding unit (C) Yohai Devir 234267 - November 2005

+ HDU SLT $1 $6 $9 LW $9, 1000($4) NEXT OP SLT $1 $6 $9 m u x 1 IF/ID ID/EX WB EX M EX/MEM MEM/WB m u x RegWrite Control WB WB M 4 + m u x ALU result Zero Read data 1 Data Memory Read reg 1 Read reg 2 Instruction Memory Read Address Write Address PC Register File m u x Instruction Write reg Read Data m u x 1 Read Address Read data 2 Write data Write Data 32 SLT $1 $6 $9 LW $9, 1000($4) NEXT OP SLT $1 $6 $9 LW $9, 1000($4) Forwarding unit NEXT OP SLT $1 $6 $9 ( SLT $1 $6 $9 ) LW $9, 1000($4) NEXT OP SLT $1 $6 $9 ( SLT $1 $6 $9 ) LW $9, … (C) Yohai Devir 234267 - November 2005

תלויות מידע נוספות כל ה Data Hazard-שדברנו עליהם עד עכשיו היו מסוג (RAW) Read After Write . קיימים 3 סוגים שונים של Data Hazards: RAW ­ Read After Write WAW ­ Write After Write WAR ­ Write After Read במערכות In Order(מעבד שמבצע פקודות רק בסדר הופעתן בקוד) יכולים לקרות Data Hazard מסוג RAW בלבד. MIPSהיא מערכת In Order ולכן מעבד MIPS לא מושפע מ Data Hazards-מסוגים אחרים. Data Hazards מסוג WAW אוWAR עלולים להיות בעיה רק במערכות Out Of Order. (C) Yohai Devir 234267 - November 2005

דוגמא של WAW (Write after Write) Data Hazard DIV $1 $2 $3 ADD $4 $1 $5 ADD $4 $7 $9 פקודת DIV לוקחת הרבה זמן, ולכן פקודת ADD ראשונה מתעכבת ולא יכולה להמשיך (למה?) במערכת OOOE המעבד יבצע את פקודת ה-ADD השנייה לפני פקודת ה-ADD הראשונה (המתעכבת עד לחישוב תוצאת R1). מה שעלול לקרות אז הוא שהתוכן הסופי של R4 אחרי שלושת הפקודות הוא זה שהיה אמור להיות אחרי הפקודה השנייה ולא אחרי הפקודה השלישית. זהו WAW Data Hazard. (C) Yohai Devir 234267 - November 2005

דוגמא של WAR (Write after Read) Data Hazard DIV $1 $2 $3 ADD $4 $1 $5 ADD $5 $7 $9 כמו בדוגמא הקודמת, פקודה 1 האיטית גורמת לעיכוב פקודה 2, פקודה 3 הבלתי תלויה מתבצעת וכותבת ערך ל- R5, צריך לדאוג שפקודה 2 שמשתמשת ב- R5 תקבל את ערכו לפני העדכון של פקודה מספר 3. במערכות OOOE צריך לדאוג לטפל ב-Data Hazards אלו. (C) Yohai Devir 234267 - November 2005

backups (C) Yohai Devir 234267 - November 2005

+ + (C) Yohai Devir 234267 - November 2005 IF/ID ID/EX EX/MEM MEM/WB 4 PCSrc m u x 1 IF/ID ID/EX WB EX M EX/MEM MEM/WB RegWrite Control WB WB M Shift left 2 + 4 + Branch MemWrite RegWrite MemRead RegDst Read reg 1 ALUop ALUSrc Data Memory ALU result Zero MemtoReg Read data 1 Read reg 2 Instruction Memory Read Address m u x 1 Write Address PC Register File Instruction Read data 2 Write reg Read Data m u x 1 Read Address Write data Write Data Sign extend 32 ALU Control [15-0] 6 16 32 [20-16] m u x 1 Rd\Rt Rd\Rt [15-11] RegDst (C) Yohai Devir 234267 - November 2005

(C) Yohai Devir 234267 - November 2005 IF/ID ID/EX EX/MEM MEM/WB Data Memory Read reg 1 ALU result Zero Read data 1 Read reg 2 Instruction Memory Read Address Write Address Register File Instruction Read data 2 Write reg Read Data m u x 1 Read Address Write data Write Data 32 Rd\Rt Rd\Rt (C) Yohai Devir 234267 - November 2005

(C) Yohai Devir 234267 - November 2005 IF/ID ID/EX EX/MEM MEM/WB ALU Instruction Memory Read Address ALU result Zero Read data 1 Data Memory Read reg 1 Read reg 2 Write Address Register File m u x Instruction Write reg Read Data m u x 1 Read Address Read data 2 Write data Write Data 32 Forwarding unit (C) Yohai Devir 234267 - November 2005

+ HDU (C) Yohai Devir 234267 - November 2005 EX instruction write register Is EX Instruction LOAD? HDU Make ID instruction a bubble m u x 1 IF/ID ID/EX WB EX M m u x EX/MEM MEM/WB m u x RegWrite Stall PC and IF/ID latch Control WB WB m u x ID instruction’s source regs M 4 + m u x ALU result Zero Read data 1 Data Memory Read reg 1 Read reg 2 Instruction Memory Read Address Write Address PC Register File m u x Instruction Write reg Read Data m u x 1 Read Address Read data 2 Write data Write Data 32 Forwarding unit (C) Yohai Devir 234267 - November 2005

+ + (C) Yohai Devir ID/EX IF/ID EX/MEM MEM/WB 4 ALU PC Register File PCSrc m u x 1 ID/EX WB EX M IF/ID EX/MEM MEM/WB RegWrite Rd\Rt Rd\Rt Control WB WB M Shift left 2 + 4 + Branch MemWrite RegWrite MemRead ALUSrc Read reg 1 Read data 1 RegDst ALUop Data Memory m u x ALU result Zero MemtoReg Read reg 2 Instruction Memory m u x 1 Write Address PC Register File Instruction Write reg Read Data m u x 1 Read data 2 Read Address Read Address Write data m u x Write Data Sign extend ALU Control 6 [15-0] 16 32 m u x 1 [20-16] [15-11] RegDst Forwarding unit (C) Yohai Devir

+ (C) Yohai Devir ID/EX ALU Register File EX/MEM MEM/WB 4 IF/ID PC WB ALUSrc 6 ALU result Zero + Shift left 2 RegDst RegWrite Read reg 1 reg 2 Write reg data data 1 data 2 Register File [15-0] [20-16] [15-11] Sign extend 16 EX/MEM MEM/WB Instruction MemRead MemWrite Branch PCSrc MemtoReg 4 IF/ID PC Memory Read Address m u x 1 Control 32 Rd\Rt Write Data Data Write Address ALUop Forwarding unit (C) Yohai Devir