1 / 54

2 Level Branch prediction

2 Level Branch prediction. בעריכת אורן קצנגולד. למה?. אם יש לולאה קצרה בתוך לולאה ארוכה, התחקות אחרי ההיסטוריה עשויה לעלות על התבנית. לולאה של 2 איטרציות: BTB רגיל טועה כל פעם סדרה של הוראות סיעוף התלויות אחת בשנייה (למשל switch-case ), ניתן אולי ללמוד על התלות. סטטיסטית זה עובד. מה זה?.

meryle
Download Presentation

2 Level Branch prediction

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. 2 Level Branch prediction בעריכת אורן קצנגולד

  2. למה? • אם יש לולאה קצרה בתוך לולאה ארוכה, התחקות אחרי ההיסטוריה עשויה לעלות על התבנית. • לולאה של 2 איטרציות: BTB רגיל טועה כל פעם • סדרה של הוראות סיעוף התלויות אחת בשנייה (למשל switch-case), ניתן אולי ללמוד על התלות. • סטטיסטית זה עובד...

  3. מה זה? • ישנם שני סטים, סט של היסטוריות וסט של מצבים (מכונת מצבים), וכן ישנו מיפוי בין שני הסטים – על כן נקרא 2-level. • במקרה הפשוט: במקום להחזיק במכונת מצבים אחת לכל הוראת branch מחזיקים 2n מכונות מצבים ובוחרים במכונה הרצויה ע"פ ההיסטוריה של n ההכרעות (taken/not taken) האחרונות.

  4. איפה ה- catch? • רוצים להחזיק יותר מכונות מצבים – יותר זיכרון. • מנגנון מסובך יותר – עשוי לקחת יותר זמן ולצרוך יותר משאבים. • למרות זאת, במעבדים מודרנים כאשר מחזור השעון קצר יותר וה-pipeline ארוך יותר, שווה להשקיע בשביל חיזויים טובים יותר.

  5. 1 0 1 0 איך זה עובד? • בכל רגע נתון מחזיקים ב-shift register בן n ביטים אשר מציין את ההיסטוריה (0 ל not taken ו-1 ל taken), למשל עבור 5 ביטים: 1 lsb • ואם נקבל הכרעת קפיצה taken אז נקבל... 1

  6. SNT 00 WNT 01 WT 10 ST 11 איך זה עובד? • ישנה טבלא של מכונות מצבים, למשל 2 bit counter: • אם יש לנו shift register (שנקרא לו BHR) בן n ביטים, אז גודל הטבלא 2n, ובוחרים בכניסה המתאימה ע"י ערך ה-BHR, חוזים לפי הערך שנמצא שם, ולבסוף כשיודעים את התוצאה מעדכנים את אותה המכונה בהתאם. Taken Not taken

  7. לדוגמא:

  8. Example The initialization phase– (view with XP full screen) x=0; for (I=0; I<100; I++) for (J=0; J<4;J++) x=x+j+I; WNT ST ST ST WT 12 WT 0 WT 1 WT 8 WT 2 WT 4 WT 5 WT 3 WT 7 WT 14 WT 6 WT 9 WT 10 WT 11 WT 13 WT 15 • sub r10,r10,r10 • movi r9, 100 • ll1: movi r8,4 • 112 ll2: add r10,r10,r9 • add r10,r10,r8 • 120 sub r8,r8,1 • if (r8 != r0) ll2 • 128 sub (r9,r9,1) • 132 If (r9 != r0) ll1 First level: shift register that keeps the history of the n last branches 1 1 0 1 1 We update the table based on current state (0) and modify the state AFTER the outcome is known Second level: prediction table that predicts for every history state if the direction should be taken or not taken 1 2 3

  9. Example -cont 7 11 13 • If we look at the history that will be generated at the BHR (branch history register) we can see that values 14, 13, and 11 will indicate taken branches while state 7 will indicate not taken branch. • If sequence of histories repeats itself, we claim that the system reaches stability. 14 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 14 13 11 7

  10. BHR • ניתן להחזיק BHR אחד גלובלי, ואז ההיסטוריה היא כללית. (עשוי להיות יעיל בתפיסת תלויות בין הוראות branch) • או לחילופין BHR לכל הוראת branch, ואז ה-BHR לוקאלי (עשוי לעלות על תבנית חוזרת של הוראות branch - למשל לולאות מקוננות).

  11. טבלת מכונות החיזוי • ניתן להחזיק בטבלא גלובלית, בכך לחסוך במקום ולאפשר אולי BHR-ים ארוכים יותר (שים לב שהטבלא גדלה אקספוננציאלית). • להחזיק טבלה לוקאלית לכל הוראת branch.

  12. טבלת ההיסטוריות • במקרה של היסטוריה ו/או טבלאות חיזוי לוקאליות, נחזיק טבלת היסטוריות. • לעת עתה נניח שהחיפוש מתבצע כניסה כניסה. • הכניסה המתאימה תחזיק את הכתובת של הוראת ה-branch (שדה ה-tag), אם ההיסטוריה לוקאלית אז את ההיסטוריה של אותה פקודה, ואם טבלאות החיזוי לוקאליות אז את הטבלה המתאימה לפקודה. • הרחבת העקרון של BTB רגיל

  13. ובמילים אחרות... טבלת ההיסטוריות 2-bit-sat counter array (BHRs) prediction = msb of counter Branch IP tag history Update History with branch outcome Update counter with branch outcome

  14. קטע קוד for (i=100; i>0; i--) for (j=2; j<5; j++) if (i%j == 0) … Addi r5, r0, 5 Addi r1,r0,100 L1: Addi r2, r0, 2 L2: Mod r3, r1, r2 Bne r3, r0, IF . . . IF: Addi r2, r2, 1 Bne r2, r5, L2 Subi r1, r1, 1 Bne r1, r0, L1 תרגום:

  15. טבלא ו-BHR לוקלים • נניח שברשותנו טבלת היסטוריות בת 1024 כניסות, ואנו לוקחים היסטוריה של 4 הוראות. • כמו כן נניח שכתובת היא בת 32 סיביות וכל ההוראות הן aligned כך שניתן להשמיט את שתי הסיביות ה-lsb. • אסוציאטיביות מלאה (כל קפיצה יכולה להיכנס לכל שורת הטבלה) • מהו גודל טבלת ההיסטוריות?

  16. The predictor size: #entries * (tag_size + history_size + 2*2 history_size) #entries = 1024 tag_size (branch IP) = 32 – 2 = 30 bit history_size = 4 => size= 1024 * (30+4+2*24) = 66 K bits • כחצי-חצי לתגים ולמכונות רמה שנייה

  17. WT WT WT WT r1 100 WT 15 WT 14 WT 13 WT 11 WT 10 WT 9 WT 8 WT 7 WT 4 WT 5 WT 3 WT 2 WT 1 WT 12 WT 0 WT 6 r2 2 r3 0 IP2 IP3 IP1 0 0 0 0 0 0 0 0 0 0 0 0 דוגמת הרצה: BHRs Addi r5, r0, 5 Addi r1,r0,100 L1: Addi r2, r0, 2 L2: Mod r3, r1, r2 Bne r3, r0, IF . . . IF: Addi r2, r2, 1 Bne r2, r5, L2 Subi r1, r1, 1 Bne r1, r0, L1 tag history IP1 IP2 IP3

  18. WT WT WT WT r1 100 WT 10 WT 9 WT 8 WT 7 WT 14 WT 5 WT 3 WT 1 WT 2 WT 4 WT 12 WNT 0 WT 15 WT 11 WT 13 WT 6 r2 2 r3 0 IP3 IP1 IP2 0 0 0 0 0 0 0 0 0 0 0 0 טעות בחיזוי (לא הייתה קפיצה) Addi r5, r0, 5 Addi r1,r0,100 L1: Addi r2, r0, 2 L2: Mod r3, r1, r2 Bne r3, r0, IF . . . IF: Addi r2, r2, 1 Bne r2, r5, L2 Subi r1, r1, 1 Bne r1, r0, L1 BHRs tag history

  19. WT WT WT WT r1 100 WT 1 WT 15 WT 14 WT 13 WT 11 WT 12 WT 10 WT 2 WT 7 WT 8 WT 6 WT 5 WT 4 WT 0 WT 9 WT 3 r2 3 r3 0 IP2 IP1 IP3 0 0 0 0 0 0 0 0 0 0 0 0 BHRs Addi r5, r0, 5 Addi r1,r0,100 L1: Addi r2, r0, 2 L2: Mod r3, r1, r2 Bne r3, r0, IF . . . IF: Addi r2, r2, 1 Bne r2, r5, L2 Subi r1, r1, 1 Bne r1, r0, L1 tag history

  20. WT WT WT WT r1 100 WT 1 WT 15 WT 14 WT 13 WT 12 WT 11 WT 10 WT 7 WT 2 WT 9 WT 6 WT 5 ST 0 WT 3 WT 8 WT 4 r2 3 r3 0 IP2 IP1 IP3 0 0 0 0 0 0 0 0 0 0 1 0 חיזוי נכון (הייתה קפיצה) BHRs Addi r5, r0, 5 Addi r1,r0,100 L1: Addi r2, r0, 2 L2: Mod r3, r1, r2 Bne r3, r0, IF . . . IF: Addi r2, r2, 1 Bne r2, r5, L2 Subi r1, r1, 1 Bne r1, r0, L1 tag history

  21. WT WT WT WT r1 100 WT 1 WT 15 WT 14 WT 13 WT 11 WT 12 WT 10 WT 2 WT 7 WT 8 WT 6 WT 5 WT 4 WNT 0 WT 9 WT 3 r2 3 r3 1 IP2 IP1 IP3 0 0 0 0 0 0 0 0 0 0 1 0 BHRs Addi r5, r0, 5 Addi r1,r0,100 L1: Addi r2, r0, 2 L2: Mod r3, r1, r2 Bne r3, r0, IF . . . IF: Addi r2, r2, 1 Bne r2, r5, L2 Subi r1, r1, 1 Bne r1, r0, L1 tag history

  22. WT WT WT WT r1 100 WT 4 WT 8 WT 13 WT 11 WT 10 WT 0 WT 12 WT 3 WT 2 WT 15 WT 9 WT 5 WT 6 WT 7 WT 1 WT 14 r2 3 r3 1 IP2 IP3 IP1 0 0 0 0 0 0 0 0 0 0 1 1 טעות בחיזוי (הייתה קפיצה) BHRs Addi r5, r0, 5 Addi r1,r0,100 L1: Addi r2, r0, 2 L2: Mod r3, r1, r2 Bne r3, r0, IF . . . IF: Addi r2, r2, 1 Bne r2, r5, L2 Subi r1, r1, 1 Bne r1, r0, L1 tag history

  23. WT WT WT WT r1 100 WT 1 WT 15 WT 14 WT 13 WT 11 WT 12 WT 10 WT 2 WT 7 WT 8 WT 6 WT 5 WT 4 ST 0 WT 9 WT 3 r2 4 r3 1 IP2 IP1 IP3 0 0 0 0 0 0 0 0 0 0 1 1 BHRs Addi r5, r0, 5 Addi r1,r0,100 L1: Addi r2, r0, 2 L2: Mod r3, r1, r2 Bne r3, r0, IF . . . IF: Addi r2, r2, 1 Bne r2, r5, L2 Subi r1, r1, 1 Bne r1, r0, L1 tag history

  24. WT WT WT ST r1 100 WT 1 WT 15 WT 14 WT 13 WT 12 WT 11 WT 10 WT 7 WT 2 WT 9 WT 6 WT 5 ST 0 WT 3 WT 8 WT 4 r2 4 r3 1 IP2 IP1 IP3 0 0 0 0 0 0 0 1 0 0 1 1 חיזוי נכון (הייתה קפיצה) BHRs Addi r5, r0, 5 Addi r1,r0,100 L1: Addi r2, r0, 2 L2: Mod r3, r1, r2 Bne r3, r0, IF . . . IF: Addi r2, r2, 1 Bne r2, r5, L2 Subi r1, r1, 1 Bne r1, r0, L1 tag history

  25. WT WT WT WT r1 100 WT 1 WT 15 WT 14 WT 13 WT 11 WT 12 WT 10 WT 2 WT 7 WT 8 WT 6 WT 5 WT 4 WT 0 WT 9 WT 3 r2 4 r3 0 IP2 IP1 IP3 0 0 0 0 0 0 0 1 0 0 1 1 BHRs Addi r5, r0, 5 Addi r1,r0,100 L1: Addi r2, r0, 2 L2: Mod r3, r1, r2 Bne r3, r0, IF . . . IF: Addi r2, r2, 1 Bne r2, r5, L2 Subi r1, r1, 1 Bne r1, r0, L1 tag history

  26. WT WT WT WNT r1 100 WT 1 WT 15 WT 14 WT 13 WT 12 WT 11 WT 10 WT 7 WT 2 WT 9 WT 6 WT 5 WT 0 WT 3 WT 8 WT 4 r2 4 r3 0 IP2 IP1 IP3 0 0 0 0 0 0 0 1 1 0 1 0 טעות בחיזוי (לא הייתה קפיצה) BHRs Addi r5, r0, 5 Addi r1,r0,100 L1: Addi r2, r0, 2 L2: Mod r3, r1, r2 Bne r3, r0, IF . . . IF: Addi r2, r2, 1 Bne r2, r5, L2 Subi r1, r1, 1 Bne r1, r0, L1 tag history

  27. WT WT WT ST r1 100 WT 1 WT 15 WT 14 WT 13 WT 11 WT 12 WT 10 WT 2 WT 7 WT 8 WT 6 WT 5 WT 4 ST 0 WT 9 WT 3 r2 5 r3 0 IP2 IP1 IP3 0 0 0 0 0 0 0 1 1 0 1 0 BHRs Addi r5, r0, 5 Addi r1,r0,100 L1: Addi r2, r0, 2 L2: Mod r3, r1, r2 Bne r3, r0, IF . . . IF: Addi r2, r2, 1 Bne r2, r5, L2 Subi r1, r1, 1 Bne r1, r0, L1 tag history

  28. WT WT WT ST r1 100 WT 1 WT 15 WT 14 WT 13 WT 12 WT 11 WT 10 WT 7 WT 2 WT 9 WT 6 WT 5 ST 0 WNT 3 WT 8 WT 4 r2 5 r3 0 IP2 IP1 IP3 0 0 0 1 0 0 0 1 1 0 0 0 טעות בחיזוי (לא הייתה קפיצה) BHRs Addi r5, r0, 5 Addi r1,r0,100 L1: Addi r2, r0, 2 L2: Mod r3, r1, r2 Bne r3, r0, IF . . . IF: Addi r2, r2, 1 Bne r2, r5, L2 Subi r1, r1, 1 Bne r1, r0, L1 tag history

  29. WT WT WT WT r1 99 WT 1 WT 15 WT 14 WT 13 WT 11 WT 12 WT 10 WT 2 WT 7 WT 8 WT 6 WT 5 WT 4 WT 0 WT 9 WT 3 r2 5 r3 0 IP2 IP1 IP3 0 0 0 0 1 0 0 1 1 0 0 0 BHRs Addi r5, r0, 5 Addi r1,r0,100 L1: Addi r2, r0, 2 L2: Mod r3, r1, r2 Bne r3, r0, IF . . . IF: Addi r2, r2, 1 Bne r2, r5, L2 Subi r1, r1, 1 Bne r1, r0, L1 tag history

  30. WT WT WT WT r1 99 WT 1 WT 15 WT 14 WT 13 WT 12 WT 11 WT 10 WT 7 WT 2 WT 9 WT 6 WT 5 ST 0 WT 3 WT 8 WT 4 r2 5 r3 0 IP2 IP1 IP3 0 0 0 1 0 0 0 1 1 1 0 0 חיזוי נכון (הייתה קפיצה) BHRs Addi r5, r0, 5 Addi r1,r0,100 L1: Addi r2, r0, 2 L2: Mod r3, r1, r2 Bne r3, r0, IF . . . IF: Addi r2, r2, 1 Bne r2, r5, L2 Subi r1, r1, 1 Bne r1, r0, L1 tag history

  31. טבלא ו-BHR גלובליים • נשים לב שכעת אנו משתמשים ב- BHR יחיד, וכן בטבלא בודדת. • אם נניח שבדיקת כתובת הקפיצה מתבצעת בנפרד ב- BTB (כמו שבעצם הנחנו גם קודם), וכן שאנו רוצים היסטוריה של 4 הוראות. מהו גודל הזיכרון הדרוש?

  32. The predictor size: history_size + 2*2 history_size history_size = 4 => size= 4+2*24 = 36 bits לעומת66 Kb!!! • חסכנו 1023 כניסות בטבלה, ואת כל התגים

  33. WT WT WT WT r1 100 WT 5 WT 0 WT 12 WT 2 WT 3 WT 4 WT 6 WT 1 WT 9 WT 10 WT 11 WT 13 WT 7 WT 14 WT 15 WT 8 r2 2 r3 0 0 0 0 0 דוגמת הרצה: Global table Addi r5, r0, 5 Addi r1,r0,100 L1: Addi r2, r0, 2 Mod r3, r1, r2 L2: Bne r3, r0, IF . . . IF: Addi r2, r2, 1 Bne r2, r5, L2 Subi r1, r1, 1 Bne r1, r0, L1 Global BHR IP1 IP2 IP3

  34. WT WT WT WT r1 100 WNT 0 WT 12 WT 1 WT 2 WT 3 WT 5 WT 6 WT 4 WT 9 WT 10 WT 8 WT 11 WT 13 WT 14 WT 15 WT 7 r2 2 r3 0 0 0 0 0 טעות בחיזוי (לא הייתה קפיצה) Global table Addi r5, r0, 5 Addi r1,r0,100 L1: Addi r2, r0, 2 Mod r3, r1, r2 L2: Bne r3, r0, IF . . . IF: Addi r2, r2, 1 Bne r2, r5, L2 Subi r1, r1, 1 Bne r1, r0, L1 Global BHR

  35. WT WT WT WT r1 100 WNT 0 WT 12 WT 1 WT 2 WT 3 WT 5 WT 6 WT 4 WT 9 WT 10 WT 8 WT 11 WT 13 WT 14 WT 15 WT 7 r2 3 r3 0 0 0 0 0 Global table Addi r5, r0, 5 Addi r1,r0,100 L1: Addi r2, r0, 2 Mod r3, r1, r2 L2: Bne r3, r0, IF . . . IF: Addi r2, r2, 1 Bne r2, r5, L2 Subi r1, r1, 1 Bne r1, r0, L1 Global BHR

  36. WT WT WT WT r1 100 WT 0 WT 12 WT 1 WT 2 WT 3 WT 5 WT 6 WT 4 WT 9 WT 10 WT 8 WT 11 WT 13 WT 14 WT 15 WT 7 r2 3 r3 0 0 0 0 1 טעות בחיזוי (הייתה קפיצה) Global table Addi r5, r0, 5 Addi r1,r0,100 L1: Addi r2, r0, 2 Mod r3, r1, r2 L2: Bne r3, r0, IF . . . IF: Addi r2, r2, 1 Bne r2, r5, L2 Subi r1, r1, 1 Bne r1, r0, L1 Global BHR

  37. WT WT WT WT r1 100 WT 0 WT 12 WT 1 WT 2 WT 3 WT 5 WT 6 WT 4 WT 9 WT 10 WT 8 WT 11 WT 13 WT 14 WT 15 WT 7 r2 3 r3 1 0 0 0 1 Global table Addi r5, r0, 5 Addi r1,r0,100 L1: Addi r2, r0, 2 Mod r3, r1, r2 L2: Bne r3, r0, IF . . . IF: Addi r2, r2, 1 Bne r2, r5, L2 Subi r1, r1, 1 Bne r1, r0, L1 Global BHR

  38. WT WT WT ST r1 100 WT 0 WT 12 WT 1 WT 2 WT 3 WT 5 WT 6 WT 4 WT 9 WT 10 WT 8 WT 11 WT 13 WT 14 WT 15 WT 7 r2 3 r3 1 0 0 1 1 חיזוי נכון (הייתה קפיצה) Global table Addi r5, r0, 5 Addi r1,r0,100 L1: Addi r2, r0, 2 Mod r3, r1, r2 L2: Bne r3, r0, IF . . . IF: Addi r2, r2, 1 Bne r2, r5, L2 Subi r1, r1, 1 Bne r1, r0, L1 Global BHR

  39. WT WT WT ST r1 100 WT 0 WT 12 WT 1 WT 2 WT 3 WT 5 WT 6 WT 4 WT 9 WT 10 WT 8 WT 11 WT 13 WT 14 WT 15 WT 7 r2 4 r3 1 0 0 1 1 Global table Addi r5, r0, 5 Addi r1,r0,100 L1: Addi r2, r0, 2 Mod r3, r1, r2 L2: Bne r3, r0, IF . . . IF: Addi r2, r2, 1 Bne r2, r5, L2 Subi r1, r1, 1 Bne r1, r0, L1 Global BHR

  40. WT WT WT ST r1 100 WT 0 WT 12 WT 1 WT 2 ST 3 WT 5 WT 6 WT 4 WT 9 WT 10 WT 8 WT 11 WT 13 WT 14 WT 15 WT 7 r2 4 r3 1 0 1 1 1 חיזוי נכון (הייתה קפיצה) Global table Addi r5, r0, 5 Addi r1,r0,100 L1: Addi r2, r0, 2 Mod r3, r1, r2 L2: Bne r3, r0, IF . . . IF: Addi r2, r2, 1 Bne r2, r5, L2 Subi r1, r1, 1 Bne r1, r0, L1 Global BHR

  41. WT WT WT ST r1 100 WT 0 WT 12 WT 1 WT 2 ST 3 WT 5 WT 6 WT 4 WT 9 WT 10 WT 8 WT 11 WT 13 WT 14 WT 15 WT 7 r2 4 r3 0 0 1 1 1 Global table Addi r5, r0, 5 Addi r1,r0,100 L1: Addi r2, r0, 2 Mod r3, r1, r2 L2: Bne r3, r0, IF . . . IF: Addi r2, r2, 1 Bne r2, r5, L2 Subi r1, r1, 1 Bne r1, r0, L1 Global BHR

  42. WT WNT WT ST r1 100 WT 0 WT 12 WT 1 WT 2 ST 3 WT 5 WT 6 WT 4 WT 9 WT 10 WT 8 WT 11 WT 13 WT 14 WT 15 WT 7 r2 4 r3 0 1 1 1 0 טעות בחיזוי (לא הייתה קפיצה) Global table Addi r5, r0, 5 Addi r1,r0,100 L1: Addi r2, r0, 2 Mod r3, r1, r2 L2: Bne r3, r0, IF . . . IF: Addi r2, r2, 1 Bne r2, r5, L2 Subi r1, r1, 1 Bne r1, r0, L1 Global BHR

  43. WT WNT WT ST r1 100 WT 0 WT 12 WT 1 WT 2 ST 3 WT 5 WT 6 WT 4 WT 9 WT 10 WT 8 WT 11 WT 13 WT 14 WT 15 WT 7 r2 5 r3 0 1 1 1 0 Global table Addi r5, r0, 5 Addi r1,r0,100 L1: Addi r2, r0, 2 Mod r3, r1, r2 L2: Bne r3, r0, IF . . . IF: Addi r2, r2, 1 Bne r2, r5, L2 Subi r1, r1, 1 Bne r1, r0, L1 Global BHR

  44. WNT WNT WT ST r1 100 WT 0 WT 12 WT 1 WT 2 ST 3 WT 5 WT 6 WT 4 WT 9 WT 10 WT 8 WT 11 WT 13 WT 14 WT 15 WT 7 r2 5 r3 0 1 1 0 0 טעות בחיזוי (לא הייתה קפיצה) Global table Addi r5, r0, 5 Addi r1,r0,100 L1: Addi r2, r0, 2 Mod r3, r1, r2 L2: Bne r3, r0, IF . . . IF: Addi r2, r2, 1 Bne r2, r5, L2 Subi r1, r1, 1 Bne r1, r0, L1 Global BHR

  45. WNT WNT WT ST r1 99 WT 0 WT 12 WT 1 WT 2 ST 3 WT 5 WT 6 WT 4 WT 9 WT 10 WT 8 WT 11 WT 13 WT 14 WT 15 WT 7 r2 5 r3 0 1 1 0 0 Global table Addi r5, r0, 5 Addi r1,r0,100 L1: Addi r2, r0, 2 Mod r3, r1, r2 L2: Bne r3, r0, IF . . . IF: Addi r2, r2, 1 Bne r2, r5, L2 Subi r1, r1, 1 Bne r1, r0, L1 Global BHR

  46. WNT WNT WT ST r1 99 WT 0 ST 12 WT 1 WT 2 ST 3 WT 5 WT 6 WT 4 WT 9 WT 10 WT 8 WT 11 WT 13 WT 14 WT 15 WT 7 r2 5 r3 0 1 0 0 1 חיזוי נכון (הייתה קפיצה) Global table Addi r5, r0, 5 Addi r1,r0,100 L1: Addi r2, r0, 2 Mod r3, r1, r2 L2: Bne r3, r0, IF . . . IF: Addi r2, r2, 1 Bne r2, r5, L2 Subi r1, r1, 1 Bne r1, r0, L1 Global BHR

  47. דוגמא: 0 1 for (i=100; i>0; i--) for (j=2; j<6; j++) switch (i%j) { case 0: … break; case 1: … break; case 2: … break; case 3: … break; case 4: … break; } 2 3 4 5 6

  48. התנהגות ה branch-ים השונים • TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTN - 0 • TTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTN - 1 • TTTTNTTTTNTTNTNTTTTNNNTTTTTTNTNTTNTTNTTNTTTTNNNTTTTTNTTTTNTNNTNTTTTTNNTTTTTTNTNNTNTTNTTTTTTTNNNTTTTNNTTTTNTTNTNTTTTTNNTNTTTTNTNTTNTTNTTTTTTNNNNTTTTTNTTTTNTTNTNNTTTTNNTTTTTTNTNTTNTNNTTTTTTTNNNTTTTTNTTNTNTTNTNTTTTTNNTTTTTNNTNTTNTTNTTTTTTTNNNNTTTTNTTTTNTTNTNTTTTNNNTTTTTTNTNTTNTTNTTNTTTTNNNTTTTTNTTTTNTNNTNTTTTTNNTTTTTTNTNNTNTTNTTTTTTTNNNTTTTNNTTTTNTTNTNTTTTTNNTNTTTTNTNTTNTTNTTTTTTNNNNTTTTTNTTTTNTTNTNN - 2 • NNNNTTTTNTTTTNTTNTNTTTTNNNTTTTTTNTNTTNTTNTTNTTTTNNNTTTTTNTTTTNTNNTNTTTTTNNTTTTTTNTNNTNTTNTTTTTTTNNNTTTTNNTTTTNTTNTNTTTTTNNTNTTTTNTNTTNTTNTTTTTTNNNNTTTTTNTTTTNTTNTNNTTTTNNTTTTTTNTNTTNTNNTTTTTTTNNNTTTTTNTTNTNTTNTNTTTTTNNTTTTTNNTNTTNTTNTTTTTTTNNNNTTTTNTTTTNTTNTNTTTTNNNTTTTTTNTNTTNTTNTTNTTTTNNNTTTTTNTTTTNTNNTNTTTTTNNTTTTTTNTNNTNTTNTTTTTTTNNNTTTTNNTTTTNTTNTNTTTTTNNTNTTTTNTNTTNTTNTTTTTTNNNNTTTTTNTTTTNTT - 3 • TTTTTNNNTTTTTTTTTNTTTTNTTTTNTNTTTTTTTTNTTNTTTTTNTTTTTNNTTTTTTTTTTNTNTTNTTTTTTNTTTTTTTTNNTNTTTTTTTTTTTNNTTTTNTTTTTNTTTTNTTTTTTNTNTTTTTTNTTNTTTTTTTTTNTNNTTTTTTTTTTNTTTTNNTTTTTNTTTTTTTTNTTNTNTTTTTTTTTNNTTTTTTTTNTNTTTTNTTTTTTNTTTTTNTTNTTNTTTTTTTTTTTNNNTTTTTTTTTNTTTTNTTTTNTNTTTTTTTTNTTNTTTTTNTTTTTNNTTTTTTTTTTNTNTTNTTTTTTNTTTTTTTTNNTNTTTTTTTTTTTNNTTTTNTTTTTNTTTTNTTTTTTNTNTTTTTTNTTNTTTTTTTTTNTNNTTTTTTTTT - 4 • TTTTTTTTTTNNTTTTTTTTTTTTTTNTTTTNTTTTTTTTTTNTTTTTTTTNTTTTTTNTTTTTTTTTTTTNTTNTTTTTTTTTTTTTTTNNTTTTTTTTTTTTTTNTTTTNTTTTTTTTTTNTTTTTTTTNTTTTTTNTTTTTTTTTTTTNTTNTTTTTTTTTTTTTTTNNTTTTTTTTTTTTTTNTTTTNTTTTTTTTTTNTTTTTTTTNTTTTTTNTTTTTTTTTTTTNTTNTTTTTTTTTTTTTTTNNTTTTTTTTTTTTTTNTTTTNTTTTTTTTTTNTTTTTTTTNTTTTTTNTTTTTTTTTTTTNTTNTTTTTTTTTTTTTTTNNTTTTTTTTTTTTTTNTTTTNTTTTTTTTTTNTTTTTTTTNTTTTTTNTTTTTTTTTTTTNTTNTTTTT - 5 • TTTTTTTTTTTTTTTNTTTTTTTTTTTTTTTTTTTNTTTTTTTTTTTTTTTTTTTNTTTTTTTTTTTTTTTTTTTNTTTTTTTTTTTTTTTTTTTNTTTTTTTTTTTTTTTTTTTNTTTTTTTTTTTTTTTTTTTNTTTTTTTTTTTTTTTTTTTNTTTTTTTTTTTTTTTTTTTNTTTTTTTTTTTTTTTTTTTNTTTTTTTTTTTTTTTTTTTNTTTTTTTTTTTTTTTTTTTNTTTTTTTTTTTTTTTTTTTNTTTTTTTTTTTTTTTTTTTNTTTTTTTTTTTTTTTTTTTNTTTTTTTTTTTTTTTTTTTNTTTTTTTTTTTTTTTTTTTNTTTTTTTTTTTTTTTTTTTNTTTTTTTTTTTTTTTTTTTNTTTTTTTTTTTTTTTTTTTNTTTT - 6

  49. תוצאות חיזוי נכון (היסטוריה של 5 הוראות) • global history & table: • 0 : 0.99 • 1 : 0.655 • 2 : 0.565 • 3 : 0.77 • 4 : 0.7675 • 5 : 0.88 • 6 : 0.965 • avg: 0.776 • global history & local tables: • 0 : 0.99 • 1 : 0.7975 • 2 : 0.5725 • 3 : 0.74 • 4 : 0.7975 • 5 : 0.9475 • 6 : 0.9975 • avg: 0.816 • 2 bit counter: 0 : 0.98 1 : 0.7475 2 : 0.605 3 : 0.61 4 : 0.7675 5 : 0.8725 6 : 0.9475 avg: 0.7672 • local history & tables: 0 : 0.99 1 : 0.995 2 : 0.6025 3 : 0.605 4 : 0.76 5 : 0.885 6 : 0.95 avg: 0.8072 • local history & global table: • 0 : 0.98 • 1 : 0.98 • 2 : 0.6275 • 3 : 0.64 • 4 : 0.785 • 5 : 0.865 • 6 : 0.9275 • avg: 0.8112

  50. טבלת חיזוי גלובלית • החיסרון של טבלא גלובלית עשוי להיות בעיית ההתנגשויות בין הוראות branch שונות. • דרך אחת להתמודדות עם זה היא ליצור ערבול כלשהו בטבלא ע"י בחירת המכונה המתאימה לא רק ע"פ ה-BHR אלא ע"פ תוצאת ה-XOR שלו עם ה- branch IP. • הטריק נקרא בלעז: Ishare/gshare

More Related