520 likes | 665 Views
2 Level Branch P rediction. בעריכת אורן קצנגולד Updated by Franck Sala. למה?. אם יש לולאה קצרה בתוך לולאה ארוכה, התחקות אחרי ההיסטוריה עשויה לעלות על התבנית. לולאה של 2 איטרציות: BTB רגיל טועה כל פעם סדרה של הוראות סיעוף התלויות אחת בשנייה (למשל switch-case ), ניתן אולי ללמוד על התלות.
E N D
2 Level Branch Prediction בעריכת אורן קצנגולד Updated by Franck Sala
למה? • אם יש לולאה קצרה בתוך לולאה ארוכה, התחקות אחרי ההיסטוריה עשויה לעלות על התבנית. • לולאה של 2 איטרציות: BTB רגיל טועה כל פעם • סדרה של הוראות סיעוף התלויות אחת בשנייה (למשל switch-case), ניתן אולי ללמוד על התלות. • סטטיסטית זה עובד...
מה זה? • ישנם שני סטים, סט של היסטוריות וסט של מצבים (מכונת מצבים), וכן ישנו מיפוי בין שני הסטים – על כן נקרא 2-level • History • State • במקרה הפשוט: במקום להחזיק במכונת מצבים אחת לכל הוראת branch מחזיקים 2n מכונות מצבים ובוחרים במכונה הרצויה ע"פ ההיסטוריה של n ההכרעות (taken/not taken) האחרונות.
איפה ה- catch? • רוצים להחזיק יותר מכונות מצבים יותר זיכרון. • מנגנון מסובך יותר עשוי לקחת יותר זמן ולצרוך יותר משאבים. • למרות זאת, במעבדים מודרנים כאשר מחזור השעון קצר יותר וה-pipeline ארוך יותר, שווה להשקיע בשביל חיזויים טובים יותר.
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 אז נקבל... 1
SNT 00 WNT 01 WT 10 ST 11 איך זה עובד? • ישנה טבלא של מכונות מצבים, למשל 2 bit counter: • אם יש לנו BHR בן n ביטים, אז גודל הטבלא 2n • ובוחרים בכניסה המתאימה ע"י ערך ה-BHR, חוזים לפי הערך שנמצא שם, ולבסוף כשיודעים את התוצאה מעדכנים את אותה המכונה בהתאם. Taken Not taken
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 1 WT 8 WT 2 WT 0 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 1 1 0 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
Example -cont BHR History 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 • 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. 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 13 11 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 7 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 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
BHR • Global BHR: • ניתן להחזיק BHR אחד גלובלי, ואז ההיסטוריה היא כללית. (עשוי להיות יעיל בתפיסת תלויות בין הוראות branch) • Per Branch BHR: • או לחילופין BHR לכל הוראת branch, ואז ה-BHR לוקאלי (עשוי לעלות על תבנית חוזרת של הוראות branch - למשל לולאות מקוננות).
טבלת מכונות החיזוי • Global Table: • ניתן להחזיק בטבלא גלובלית, בכך לחסוך במקום ולאפשר אולי BHR-ים ארוכים יותר (שים לב שהטבלא גדלה אקספוננציאלית). • Per-Branch Table: • להחזיק טבלה לוקאלית לכל הוראת branch
L2 Predictor • במקרה של היסטוריה ו/או טבלאות חיזוי לוקאליות, נחזיק טבלת היסטוריות. • Caches… • הכניסה המתאימה תחזיק את הכתובת של הוראת ה-branch (שדה ה-tag) • אם ההיסטוריה לוקאלית אז את ההיסטוריה של אותה פקודה • אם טבלאות החיזוי לוקאליות אז את הטבלה המתאימה לפקודה. • הרחבת העקרון של BTB רגיל
ובמילים אחרות...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
טבלא ו-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
קטע קוד 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 תרגום:
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
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
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
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
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
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
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
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
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
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
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
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
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
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
טבלא ו-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.)
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
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
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
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
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
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
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
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
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
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
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
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
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
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
דוגמא: 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
התנהגות ה branch-ים השונים • TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTN - 0 • TTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTNTTTN - 1 • TTTTNTTTTNTTNTNTTTTNNNTTTTTTNTNTTNTTNTTNTTTTNNNTTTTTNTTTTNTNNTNTTTTTNNTTTTTTNTNNTNTTNTTTTTTTNNNTTTTNNTTTTNTTNTNTTTTTNNTNTTTTNTNTTNTTNTTTTTTNNNNTTTTTNTTTTNTTNTNNTTTTNNTTTTTTNTNTTNTNNTTTTTTTNNNTTTTTNTTNTNTTNTNTTTTTNNTTTTTNNTNTTNTTNTTTTTTTNNNNTTTTNTTTTNTTNTNTTTTNNNTTTTTTNTNTTNTTNTTNTTTTNNNTTTTTNTTTTNTNNTNTTTTTNNTTTTTTNTNNTNTTNTTTTTTTNNNTTTTNNTTTTNTTNTNTTTTTNNTNTTTTNTNTTNTTNTTTTTTNNNNTTTTTNTTTTNTTNTNN - 2 • NNNNTTTTNTTTTNTTNTNTTTTNNNTTTTTTNTNTTNTTNTTNTTTTNNNTTTTTNTTTTNTNNTNTTTTTNNTTTTTTNTNNTNTTNTTTTTTTNNNTTTTNNTTTTNTTNTNTTTTTNNTNTTTTNTNTTNTTNTTTTTTNNNNTTTTTNTTTTNTTNTNNTTTTNNTTTTTTNTNTTNTNNTTTTTTTNNNTTTTTNTTNTNTTNTNTTTTTNNTTTTTNNTNTTNTTNTTTTTTTNNNNTTTTNTTTTNTTNTNTTTTNNNTTTTTTNTNTTNTTNTTNTTTTNNNTTTTTNTTTTNTNNTNTTTTTNNTTTTTTNTNNTNTTNTTTTTTTNNNTTTTNNTTTTNTTNTNTTTTTNNTNTTTTNTNTTNTTNTTTTTTNNNNTTTTTNTTTTNTT - 3 • TTTTTNNNTTTTTTTTTNTTTTNTTTTNTNTTTTTTTTNTTNTTTTTNTTTTTNNTTTTTTTTTTNTNTTNTTTTTTNTTTTTTTTNNTNTTTTTTTTTTTNNTTTTNTTTTTNTTTTNTTTTTTNTNTTTTTTNTTNTTTTTTTTTNTNNTTTTTTTTTTNTTTTNNTTTTTNTTTTTTTTNTTNTNTTTTTTTTTNNTTTTTTTTNTNTTTTNTTTTTTNTTTTTNTTNTTNTTTTTTTTTTTNNNTTTTTTTTTNTTTTNTTTTNTNTTTTTTTTNTTNTTTTTNTTTTTNNTTTTTTTTTTNTNTTNTTTTTTNTTTTTTTTNNTNTTTTTTTTTTTNNTTTTNTTTTTNTTTTNTTTTTTNTNTTTTTTNTTNTTTTTTTTTNTNNTTTTTTTTT - 4 • TTTTTTTTTTNNTTTTTTTTTTTTTTNTTTTNTTTTTTTTTTNTTTTTTTTNTTTTTTNTTTTTTTTTTTTNTTNTTTTTTTTTTTTTTTNNTTTTTTTTTTTTTTNTTTTNTTTTTTTTTTNTTTTTTTTNTTTTTTNTTTTTTTTTTTTNTTNTTTTTTTTTTTTTTTNNTTTTTTTTTTTTTTNTTTTNTTTTTTTTTTNTTTTTTTTNTTTTTTNTTTTTTTTTTTTNTTNTTTTTTTTTTTTTTTNNTTTTTTTTTTTTTTNTTTTNTTTTTTTTTTNTTTTTTTTNTTTTTTNTTTTTTTTTTTTNTTNTTTTTTTTTTTTTTTNNTTTTTTTTTTTTTTNTTTTNTTTTTTTTTTNTTTTTTTTNTTTTTTNTTTTTTTTTTTTNTTNTTTTT - 5 • TTTTTTTTTTTTTTTNTTTTTTTTTTTTTTTTTTTNTTTTTTTTTTTTTTTTTTTNTTTTTTTTTTTTTTTTTTTNTTTTTTTTTTTTTTTTTTTNTTTTTTTTTTTTTTTTTTTNTTTTTTTTTTTTTTTTTTTNTTTTTTTTTTTTTTTTTTTNTTTTTTTTTTTTTTTTTTTNTTTTTTTTTTTTTTTTTTTNTTTTTTTTTTTTTTTTTTTNTTTTTTTTTTTTTTTTTTTNTTTTTTTTTTTTTTTTTTTNTTTTTTTTTTTTTTTTTTTNTTTTTTTTTTTTTTTTTTTNTTTTTTTTTTTTTTTTTTTNTTTTTTTTTTTTTTTTTTTNTTTTTTTTTTTTTTTTTTTNTTTTTTTTTTTTTTTTTTTNTTTTTTTTTTTTTTTTTTTNTTTT - 6
תוצאות חיזוי נכון (היסטוריה של 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
טבלת חיזוי גלובלית • החיסרון של טבלא גלובלית עשוי להיות בעיית ההתנגשויות בין הוראות branch שונות. • דרך אחת להתמודדות עם זה היא ליצור ערבול כלשהו בטבלא ע"י בחירת המכונה המתאימה לא רק ע"פ ה-BHR אלא ע"פ תוצאת ה-XOR שלו עם ה- branch IP. • הטריק נקרא בלעז: Ishare/gshare
2-bit-sat counter array history cache Branch IP tag history h prediction = msb of counter h h l.s.bits of IP local Predictor: LShare Lsharecombines the local history information with the branch IP This Xoris a significant improvement
עוד בעניין טבלת ההיסטוריות 0 31 • במציאות, במקרה של היסטוריה ו/או טבלאות חיזוי לוקאליות, לא בדיוק עוברים על כל הכניסות. • ע"פ רוב, הכניסה אל הטבלה היא ע"פ סיביות ה-lsb של כתובת הוראת ה-branch. (מיפוי ישיר) • הכניסה המתאימה תחזיק את שארית הכתובת (tag) • יכולים לקבוע אסוציאטיביות כמו בכל מטמון אחר Tag Set Line Tag Set# Tag Array Cache storage