1 / 52

2 Level Branch P rediction

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

draco
Download Presentation

2 Level Branch P rediction

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 בעריכת אורן קצנגולד Updated by Franck Sala

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

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

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

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

  6. SNT 00 WNT 01 WT 10 ST 11 איך זה עובד? • ישנה טבלא של מכונות מצבים, למשל 2 bit counter: • אם יש לנו 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 • Global BHR: • ניתן להחזיק BHR אחד גלובלי, ואז ההיסטוריה היא כללית. (עשוי להיות יעיל בתפיסת תלויות בין הוראות branch) • Per Branch BHR: • או לחילופין BHR לכל הוראת branch, ואז ה-BHR לוקאלי (עשוי לעלות על תבנית חוזרת של הוראות branch - למשל לולאות מקוננות).

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

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

  13. ובמילים אחרות...Local Predictor / Local Counter Array טבלת ההיסטוריות History Cache (BHRs) 2-bit-sat counter array 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. • אסוציאטיביות מלאה (כל קפיצה יכולה להיכנס לכל שורת הטבלה) • מהו גודל טבלת ההיסטוריות? History Cache (BHRs) 2-bit-sat counter array prediction Branch IP tag history 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

  16. 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

  17. 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

  18. 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

  19. 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

  20. 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

  21. 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

  22. 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

  23. 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

  24. 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

  25. 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

  26. 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

  27. 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

  28. 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

  29. 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

  30. טבלא ו-BHRגלובליים • נשים לב שכעת אנו משתמשים ב- BHR יחיד, וכן בטבלא בודדת. • אם נניח שבדיקת כתובת הקפיצה מתבצעת בנפרד ב- BTB (כמו שבעצם הנחנו גם קודם), וכן שאנו רוצים היסטוריה של 4 הוראות. מהו גודל הזיכרון הדרוש? • The predictor size: • history_size + 2*2 history_size • history_size = 4 • size= 4+2*24 = 36bits • vs. 66Kb • Save 1023 entries (tag+hist.)

  31. 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

  32. 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

  33. 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

  34. 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

  35. 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

  36. 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

  37. 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

  38. 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

  39. 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

  40. 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

  41. 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

  42. 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

  43. 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

  44. 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

  45. דוגמא: 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

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

  47. תוצאות חיזוי נכון (היסטוריה של 5 הוראות) 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 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 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 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 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

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

  49. 2-bit-sat counter array history cache Branch IP tag history h prediction = msb of counter h h l.s.bits of IP Global Predictor: GShare Gshare combines the global history information with the branch IP This Xoris a significant improvement

  50. עוד בעניין טבלת ההיסטוריות 0 31 • במציאות, במקרה של היסטוריה ו/או טבלאות חיזוי לוקאליות, לא בדיוק עוברים על כל הכניסות. • ע"פ רוב, הכניסה אל הטבלה היא ע"פ סיביות ה-lsb של כתובת הוראת ה-branch. (מיפוי ישיר) • הכניסה המתאימה תחזיק את שארית הכתובת (tag) • יכולים לקבוע אסוציאטיביות כמו בכל מטמון אחר Tag Set Line Tag Set# Tag Array Cache storage

More Related