1 / 33

Data Hazards

Data Hazards. Data Hazard פקודה אחת ( R-Type ) מייצרת נתון חדש וכותבת אותו לרגיסטר הפקודה הבאה בתור רוצה להשתמש באותו נתון אבל הוא לא באמת מוכן עדיין. December 2013. 1. דוגמה ל- Data Hazards. T. i. m. e. (. i. n. c. l. o. c. k. c. y. c. l. e. s. ). C. C. 7. C. C. 8.

ronni
Download Presentation

Data Hazards

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Data Hazards • Data Hazard • פקודה אחת (R-Type) מייצרת נתון חדש וכותבת אותו לרגיסטר • הפקודה הבאה בתור רוצה להשתמש באותו נתון • אבל הוא לא באמת מוכן עדיין December 2013 1

  2. דוגמה ל-Data Hazards T i m e ( i n c l o c k c y c l e s ) C C 7 C C 8 C C 9 C C 1 C C 2 C C 3 C C 4 C C 5 C C 6 V a l u e o f r e g i s t e r $ 2 : 1 0 1 0 1 0 1 0 1 0 / – 2 0 – 2 0 – 2 0 – 2 0 – 2 0 P r o g r a m e x e c u t i o n o r d e r ( i n i n s t r u c t i o n s ) R e g D M s u b $ 2 , $ 1 , $ 3 I M R e g D M a n d $ 1 2 , $ 2 , $ 5 I M R e g I M D M R e g o r $ 1 3 , $ 6 , $ 2 R R e e g g a d d $ 1 4 , $ 2 , $ 2 I M D M R e g R e g s w $ 1 5 , 1 0 0 ( $ 2 ) I M D M R e g R e g

  3. פתרון אפשרי ל- Data Hazards • Data hazards יכולים לקרות אם מנסים להשתמש בתוצאה לפני שהיא מוכנה ברגיסטר • אבל היא כבר קיימת! ננסה לתפוס אותה בדרכה לרגיסטר • המנגנון קרוי Forwardingאו עקיפה (bypass)

  4. T i m e ( i n c l o c k c y c l e s ) C C 1 C C 2 C C 3 C C 4 C C 5 C C 6 C C 7 C C 8 C C 9 V a l u e o f r e g i s t e r $ 2 : 1 0 1 0 1 0 1 0 1 0 / – 2 0 – 2 0 – 2 0 – 2 0 – 2 0 V a l u e o f E X / M E M : X X X – 2 0 X X X X X V a l u e o f M E M / W B : X X X X – 2 0 X X X X P r o g r a m e x e c u t i o n o r d e r ( i n i n s t r u c t i o n s ) s u b $ 2 , $ 1 , $ 3 I M R e g D M R e g a n d $ 1 2 , $ 2 , $ 5 I M R e g D M R e g o r $ 1 3 , $ 6 , $ 2 I M R e g D M R e g a d d $ 1 4 , $ 2 , $ 2 I M R e g D M R e g s w $ 1 5 , 1 0 0 ( $ 2 ) I M R e g D M R e g עקיפה (3 מסלולים שונים)

  5. Forwarding Unit Checks for: • Are we reading from a register that has not yet been updated? - If we are, then: • The value to be forwarded may be from the EX/MEM pipeline register output (in MEM stage) or the MEM/WB output (in WB stage). • RegWrite control signal shows if we are writing to a register. • We must forward for both rs and rt register reads. • Writes to register zero must not be forwarded! • Register zero always contains a zero, even if forwarded. • If we can forward from both EX/MEM and MEM/WB, select the newest value, the one from EX/MEM.

  6. Designing the Forwarding Unit • Detect hazard conditions: • 1a) EX/MEM.Rd = ID/EX.Rs • 1b) EX/MEM.Rd = ID/EX.Rt • 2a) MEM/WB.Rd = ID/EX.Rs • 2b) MEM/WB.Rd = ID/EX.Rt • (also check for RegWrite, zero, and newest) • Use these checks to control the forwarding multiplexers

  7. עקיפה בשלב Execute Forwarding MUXes Forwarding Logic I D / E X W B E X / M E M M W B C o n t r o l M E M / W B E X M W B I F / I D RegWrite RegWrite M n o u i t c x u r t s R e g i s t e r s n I D a t a I n s t r u c t i o n A L U P C m e m o r y M m e m o r y u x M u x I F / I D . R e g i s t e r R s R s I F / I D . R e g i s t e r R t R t I F / I D . R e g i s t e r R t R t M E X / M E M . R e g i s t e r R d u I F / I D . R e g i s t e r R d R d x F o r w a r d i n g M E M / W B . R e g i s t e r R d u n i t

  8. Load Hazards • סוג נוסף של בעיה, דומה ל- Data Hazard • אחרי LW, המילה שנטענה מהזיכרון לרגיסטר עדיין לא מוכנה מיד... • אין ברירה אלא להמתין. אפשר להכניס NOP לקוד אחרי LW • מדוע DATA HAZARD לא היה צורך ב NOP וכאן צריך? • ההמתנה מתחייבת משום שלוקח שני מחזורי שעון עד שהמילה נקראת מהזיכרון ומתייצבת באוגר MEM/WB

  9. 2 4 6 8 1 0 1 2 1 4 T i m e P r o g r a m e x e c u t i o n o r d e r ( i n i n s t r u c t i o n s ) I F I D l w $ s 0 , 2 0 ( $ t 1 ) E X M E M W B b u b b l e b u b b l e b u b b l e b u b b l e b u b b l e s u b $ t 2 , $ s 0 , $ t 3 I F I D W B E X M E M Load Hazards

  10. The nop (no operation) Instruction • In MIPS the nop instruction is a machine instruction where all 32 bits are zero. • Actually, that is: • An R-type instruction (op-code 0): • A sll instruction (func-code 0): • sll $0, $0, 0 • I.e. Shift register zero left zero times and store the result in register zero. • This does not change register zero, which is always zero anyway(!)

  11. Inserting Bubbles by the Hardware • Load Hazards can also be detected using a “hazard detection unit” in the Decode stage. • The hazard detection unit should stall the pipeline for one cycle, creating an effect similar to a nop instruction inserted by the programmer. • This can be done by inserting a “bubble” to simulate the nop instruction. • Setting all control signals to 0 will have the same effect as a nop. • We must also hold the values in the PC and IF/ID registers for one cycle! (by using clock enable).

  12. P r o g r a m T i m e ( i n c l o c k c y c l e s ) e x e c u t i o n C C 1 C C 2 C C 3 C C 4 C C 5 C C 6 C C 7 C C 8 C C 9 C C 1 0 o r d e r ( i n i n s t r u c t i o n s ) R e g D M R e g I M l w $ 2 , 2 0 ( $ 1 ) R e g D M I M R e g a n d $ 4 , $ 2 , $ 5 R e g o r $ 8 , $ 2 , $ 6 D M R e g I M I M a d d $ 9 , $ 4 , $ 2 R e g I M D M s l t $ 1 , $ 6 , $ 7 R e g D M I M R e g Inserting Bubbles in Hardware Load hazard requires one NOP Clock was stopped to IF/ID R e g R e g Bubble

  13. P r o g r a m T i m e ( i n c l o c k c y c l e s ) e x e c u t i o n C C 1 C C 2 C C 3 C C 4 C C 5 C C 6 C C 7 C C 8 C C 9 C C 1 0 o r d e r ( i n i n s t r u c t i o n s ) R e g D M R e g I M l w $ 2 , 2 0 ( $ 1 ) R e g D M I M R e g a n d $ 4 , $ 2 , $ 5 R e g o r $ 8 , $ 2 , $ 6 D M R e g I M I M a d d $ 9 , $ 4 , $ 2 R e g I M D M s l t $ 1 , $ 6 , $ 7 R e g D M I M R e g Inserting Bubbles in Hardware Data can be taken from Reg-File, NOP is not required Clock was stopped to PC R e g R e g Bubble

  14. P r o g r a m T i m e ( i n c l o c k c y c l e s ) e x e c u t i o n C C 1 C C 2 C C 3 C C 4 C C 5 C C 6 C C 7 C C 8 C C 9 C C 1 0 o r d e r ( i n i n s t r u c t i o n s ) R e g D M R e g I M l w $ 2 , 2 0 ( $ 1 ) R e g D M I M R e g a n d $ 4 , $ 2 , $ 5 R e g o r $ 8 , $ 2 , $ 6 D M R e g I M I M a d d $ 9 , $ 4 , $ 2 R e g I M D M s l t $ 1 , $ 6 , $ 7 R e g D M I M R e g Inserting Bubbles in Hardware Another forwarding R e g R e g Bubble

  15. I D / E X . M e m R e a d H a z a r d d e t e c t i o n u n i t I D / E X e W B t i E X / M E M r W D M I / F C o n t r o l u M W B I M E M / W B x 0 E X M W B I F / I D e t i r W M n C o u P i t c x u r t s R e g i s t e r s n D a t a I I n s t r u c t i o n A L U P C m e m o r y M m e m o r y u x M u x I F / I D . R e g i s t e r R s I F / I D . R e g i s t e r R t R t I F / I D . R e g i s t e r R t M E X / M E M . R e g i s t e r R d u I F / I D . R e g i s t e r R d R d x I D / E X . R e g i s t e r R t R s F o r w a r d i n g M E M / W B . R e g i s t e r R d u n i t R t Bubble Insertion Hardware Load hazard detection logic Clock disable Compare Reg # and check for memory read Stall

  16. Example: Load is Decoded (1/4)

  17. Example: Load Hazard is Detected (2/4)

  18. Example: Bubble Inserted (3/4)

  19. Example: Data Gets Forwarded (4/4)

  20. Control Hazards • עד כה ראינו: • Data hazards • Load hazard • בעיה שלישית:Control Hazard • קפיצה מותנית קורית בשלב רביעי ב- pipe. • עד שמגיעים אליה נכנסו כבר 3 פקודות עוקבות נוספות • לשלבי EXE, ID, IF • אם קופצים, יש להשמיד את 3 הפקודות שנכנסו בטעות !

  21. P C S r c I D / E X 0 M W B u E X / M E M x 1 C o n t r o l M W B M E M / W B E X M W B I F / I D A d d A d d 4 A d d e r e s u l t t i r B r a n c h W S h i f t g e e l e f t 2 t i R r W A L U S r c m g n R e a d e e o i M R t r e g i s t e r 1 A d d r e s s P C c o R e a d t u r m d a t a 1 t s R e a d e n Z e r o M I r e g i s t e r 2 I n s t r u c t i o n R e g i s t e r s A L U R e a d A L U m e m o r y 0 R e a d W r i t e d a t a 2 A d d r e s s r e s u l t 1 d a t a r e g i s t e r M M D a t a u u m e m o r y W r i t e x x d a t a 1 0 W r i t e d a t a I n s t r u c t i o n 1 6 3 2 6 [ 1 5 – 0 ] S i g n A L U M e m R e a d e x t e n d c o n t r o l I n s t r u c t i o n [ 2 0 – 1 6 ] 0 A L U O p M u I n s t r u c t i o n x [ 1 5 – 1 1 ] 1 R e g D s t מסלול הנתונים + הבקרה (תזכורת)

  22. 28 Control Hazards corruption 40+4+28=72

  23. פתרון ראשון: NOP+NOP+NOP • אחרי פקודת קפיצה מותנית נכניס 3 פעמים NOP • לא משנה אם קופצים או לא, לא יגרם נזק • הפתרון הראשון לא יעיל: • בד"כ 20% מהפקודות הן קפיצה • לולאה טיפוסית: 4 פקודות רגילות + קפיצה • במקום 5 מחזורים, תימשך 8 מחזורים (תוספת 3 NOP) • ירידה של 60%בביצועים...

  24. פתרון שני: Useful delay slots • אולי אפשר להעביר 3 פקודות מלפני BEQ לאחריו? • דוגמה: • בין אם תתבצע הקפיצה ובין אם לא, שלוש הפקודות בצבע צריכות להתבצע • פתרון לא קל: קשה מאוד למצוא תמיד 3 פקודות יעילות שאפשר להעביר לאחר ה-Branch(אסורלמשל שישפיעו על החלטת הקפיצה). אם לא, נוסיף NOP כמו בפתרון הראשון • הערה:יש פתרונות טובים יותר ! נראה בהמשך data hazard? loop: sub $t0,$t0,$t1add $s0,$s1,$s2 add $v0,$v1,$v0xor $t2,$t3,$t4bne $t0,$zero,loop nop X 3 loop: sub $t0,$t0,$t1bne $t0,$zero,loopadd $s0,$s1,$s2 add $v0,$v1,$v0xor $t2,$t3,$t4

  25. פתרון שלישי: Flush on Taken • נשתמש בקוד המקורי ללא שינוי. אם לא תהיה קפיצה (Not Take) נמשיך כרגיל. אם תהיה קפיצה, נשמיד שלוש פקודות • ריקון הצינור (flush the pipe) • בדיוק כמו במקרה של Load Hazard: נאפס את קווי הבקרה • הביצועים: • אם לא תהיה קפיצה, פקודה לכל מחזור שעון (CPI=1) • אם תהיה קפיצה, כמו במקרה של NOP×3: תוספת 3 מחזורי סרק, ירידת ביצועים עד 60%

  26. A d d r e s s W r i t e d a t a M e m R e a d פתרון רביעי: העברת BR לשלב EXE P C S r c I D / E X 0 M W B u E X / M E M x 1 C o n t r o l M W B M E M / W B E X M W B I F / I D A d d A d d 4 A d d r e s u l t e t i r B r a n c h W S h i f t g e l e f t 2 e t i R r A L U S r c W m g R e a d n e e o r e g i s t e r 1 i M R A d d r e s s P C t R e a d c o t u d a t a 1 r m t R e a d s e Z e r o n r e g i s t e r 2 M I I n s t r u c t i o n R e g i s t e r s A L U R e a d A L U m e m o r y 0 R e a d W r i t e d a t a 2 r e s u l t 1 d a t a r e g i s t e r M M D a t a u u m e m o r y W r i t e x x d a t a 1 0 I n s t r u c t i o n 1 6 3 2 6 [ 1 5 – 0 ] S i g n A L U e x t e n d c o n t r o l I n s t r u c t i o n [ 2 0 – 1 6 ] 0 A L U O p M u I n s t r u c t i o n x [ 1 5 – 1 1 ] 1 R e g D s t

  27. פתרון רביעי: העברת BR לשלב EXE • פשוט (אין שינוי משמעותי בתכנון) • מספר הפקודות שעלולות להיזרק ירד מ-3 ל-2 • הפגיעה המרבית בביצועים ירדה ל- 40% • האם ניתן להמשיך ולהעביר את ה-Branch עוד יותר מוקדם? כן!

  28. I F . F l u s h H a z a r d d e t e c t i o n u n i t I D / E X M u x W B E X / M E M M u C o n t r o l M W B M E M / W B x 0 E X M W B I F / I D 4 S h i f t l e f t 2 M u x = R e g i s t e r s D a t a I n s t r u c t i o n A L U P C m e m o r y M m e m o r y u x M u x S i g n e x t e n d M u x F o r w a r d i n g u n i t פתרון חמישי: העברת BR לשלב ID

  29. פתרון חמישי: העברת BR לשלב ID • אין ALU בשלב ID ואין כיצד לבצע השוואה (חיסור) • נוסיף משווה פשוט (מבוסס שערי XOR) • נוסיף עוד יחידת FORWARD כדי שההשוואה תתבצע בין נתונים "טריים" • STALL עשוי עדיין להיות דרוש …sub $t0,$t0,$t1bne $t0,$zero,loop חישוב כתובת הקפיצה נעשה לכל פקודה! מדוע? חישוב כתובת הקפיצה נעשה כבר בשלב ה .ID

  30. Flushing Instructions I F . F l u s h H a z a r d d e t e c t i o n u n i t I D / E X M u x W B E X / M E M M u C o n t r o l M W B M E M / W B x 0 E X M W B I F / I D 4 S h i f t l e f t 2 M u x = R e g i s t e r s D a t a I n s t r u c t i o n A L U P C m e m o r y M m e m o r y u x M u x S i g n e x t e n d Forwardingunit M u x F o r w a r d i n g u n i t

  31. פתרון שישי: Single Delay Slot • נחזור לפתרון השני, אבל עם delay slot אחד בלבד • אפשרי, כי כבר העברנו את ה-branch לשלב ID • אין צורך בריקון, הפקודה אחרי branch מתבצעת תמיד • פקודה מועילה, אם המתכנת / הקומפיילר הצליחו • פקודת NOP במקרים אחרים • אזהרה: אסור לערבב תכניות שנכתבו לפתרונות החמישי והשישי. מדוע? • כי מצאנו פקודה "מועילה" שצריכה להתבצע בכל מקרה, גם אם הלולאה מסתימת, ובפתרון חמש היא תושמד.

  32. פתרון שביעי: החלטה דינמית • ננחש (ע"פ ההיסטוריה) האם הקפיצה תתבצע או לא • ע"פ הניחוש, נביא את הפקודה הצפויה • הפקודה הבאה אם NT (Not Taken), יעד הקפיצה אם T • אם הניחוש הצליח, הרווחנו זמן • אם הניחוש נכשל: • נבצע Flush לפקודה שהובאה ונמשיך כרגיל • נשקול לעדכן את הניחוש לפעם הבאה • הסיפור המלא שייך לקורס "מבנה מחשבים ספרתיים"

  33. סיכום • השימוש ב-pipeline אמור להאיץ את החישוב • משלמים בחומרה ובהספק • משלמים בסיבוך (תוכנה + חומרה) לטיפול ב-hazards

More Related