Branch Prediction בעריכת אורן קצנגולד Updated by Franck Sala.

Slides:



Advertisements
מצגות קשורות
הכרת תוכנת בקרים. כניסה לתוכנה תתבצע בשלבים הבאים: 1
Advertisements

אוגרים ומונים – Registers & Counters
אוגרים ומונים – Registers & Counters
הרצאה 02 סוגי משתנים קרן כליף.
מבנה מחשבים ספרתיים זיכרון מטמון - המשך
תרגול מס' 1: מנהלות חזרה על ארכיטקטורת ה- MIPS
מבוא לתכנות ב-JAVA מעבדה 1
Trends in Periodic Table Properties
על הסתיו ועוד, בגן ה"תמרים" בעכו שם הגננות: מירב קדוש אלה נאמן
תרגול 11 מלכודות בניית ה-Debugger
לולאות Department of Computer Science-BGU 19 יולי 19.
The Partnership tree in ECP- Austin עץ השותפות באוסטין
THE FIFTH TRADITIONAL HANUKIYA COMPETITION IN TURKEY
טקס פתיחת "גינת השותפות" בעכו
Isotopes and Atomic Mass
OOO Execution of Memory Operations
Marina Kogan Sadetsky –
אלקטרושליליות ופולריות הקשר
משואה כימית של שריפת פחם (תגובה עם חמצן)
Jump tables, review questions
מודל דחיית זוגות אלקטרונים של קליפת הערכיות
The local ceremony for kindergarten children in Akko was on Akko’s hill and was dedicated to the environment. The children climbed the hill while singing.
Present Perfect Simple
Passover in “Tomer” kindergarten
תירגול 11: מיונים וחיפוש בינארי
תרכובות עם יונים פוליאטומים בחיי היום יום
A sneak peak of the Passover story at Levine Academy
יסודות מבני נתונים תרגול 13: עץ פורש מינימלי - Minimum Spanning Tree (MST)

סיכום - TCP TCP מבטיח העברה אמינה של המידע בסדר הנכון לרמת האפליקציה
חוק שימור החומר The Law of Conservation of Mass indicates that in an
Out Of Order Execution (Part 1)
The Dolphin Class International Forest of Support
DIPLOMACY AND INTERNATIONAL COMMUNICATION
מבני נתונים תרגול 3 ליאור שפירא.
OOO Execution of Memory Operations
Akiba Academy of Dallas Presents
האם אתם יודעים כיצד כותבים מגילה?
Carry Save Adder (CSA).
רובוטיקה תרגול שימוש בלולאות
Direction of induced current
מבוסס על שקפים מאת יאן ציטרין
זיכרון מטמון 1 מבנה מחשבים ספרתיים
זיכרון מטמון 2 מבנה מחשבים ספרתיים
תורת הקומפילציה תרגול 9: תרגום לקוד ביניים
הכנה למבחן.
מבנה מחשבים ספרתיים זכרון וירטואלי מבוסס על תרגול של מורן גביש
Computer Architecture and System Programming Laboratory
תיעוד מפעילויות ראש השנה בגן "פרפר נחמד" –עכו-תש"ע
Branch Prediction Oren Katzengold, Franck Sala, Elad Shtiegmann.
Marina Kogan Sadetsky –
Emech at 1 + W = Emech at 2 mgh1 = mgh2
© המרכז להוראת המדעים האוניברסיטה העברית בירושלים
What is Chemistry? מהי כימיה? Chemistry is the study of matter and its
שימוש בעצם ממחלקה אחרת כמאפיין במחלקה הנוכחית
מבוא לתכנות ב- JAVA מעבדה 4
מבנה כללי של היררכיית הקבצים עבור המסלול /A/B.txt
קומבינטוריקה למדעי-המחשב EULER GRAPHS גרפים אויילרים
מבוא למדעי המחשב סמסטר ב' – 2008 מרצה: יעל סיגל מתרגל: ענבל בודובסקי.
הכנת שמן זית וארכיאולוגיה בגן "ארגמן" עכו Preparing olive oil and Archeology at “Argaman” kindergarten in Akko שם הגננת: נטלי גוריבודסקי שם הסייעת :
“Augustus and his smile” “"חיוכו של נסיך
Data Structures, CS, TAU, Perfect Hashing
מבוסס על שקפים מאת יאן ציטרין
Tutorial #10 MIPS commands
תרגול מס' 2: Data and Control Hazards
OOO Execution of Memory Operations
מבנה מחשבים ספרתיים תרגול מס' 4: זכרון מטמון 2.
שם הגננת:אתי ברכפלד קיבוץ סער
תמליל מצגת:

Branch Prediction בעריכת אורן קצנגולד Updated by Franck Sala

דוגמא נתון מעבד בעל חמישה שלבי pipeline IF,ID,EX,MEM,WB עם מנגנון חיזוי (BTB) הפועל ע"פ האלגוריתם הבא: כאשר נרשמת פקודת branch ב BTB-בפעם הראשונה, מצב החיזוי שלו מאותחל ל-01. מה יהיה החיזוי בכל פעם שפקודת הBNEQ שבקטע הבא מבוצעת: MOVI R1,2 loop1: MOV R2,R1 loop2: Dec R2 BNEQ R2,R0,loop2 INC R1 BLT R1,4,loop1 מהי כמות השגיאות בחיזוי?

דוגמא MOVI R1,2 loop1: MOV R2,R1 loop2: Dec R2 BNEQ R2,R0,loop2 INC R1 BLT R1,4,loop1 מחזור R1 R2 מצב נוכחי חיזוי בפועל המצב הבא שגיאה? Loop1 1 2 BNEQ 01 not taken taken 10 + 3 4 5 6 11 7 מחזור R1 R2 מצב נוכחי חיזוי בפועל המצב הבא שגיאה? Loop1 BNEQ

דוגמא MOVI R1,2 loop1: MOV R2,R1 loop2: Dec R2 BNEQ R2,R0,loop2 INC R1 BLT R1,4,loop1 מחזור R1 R2 מצב נוכחי חיזוי בפועל המצב הבא שגיאה? Loop1 1 2 BNEQ 01 not taken taken 10 + 3 4 5 6 11 7 מחזור R1 R2 מצב נוכחי חיזוי בפועל המצב הבא שגיאה? Loop1 BNEQ

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

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

Example: The initialization phase First level: shift register that keeps the history of the n last branches x=0; for (I=0; I<100; I++) for (J=0; J<4;J++) x=x+j+I; 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 WT 0 WT 12 WT 1 WT 2 WT 3 WT 4 WT 5 WT 6 WT 7 WT 8 WT 9 WT 10 WT 11 WT 13 WT 14 WT 15 ST ST 1 1 1 1 ST We update the table based on current state (0) and modify the state AFTER the outcome is known WNT Second level: prediction table that predicts for every history state if the direction should be taken or not taken 2 1 3

Example -cont BHR History 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 13 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 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 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 indicate taken branches while state 7 indicates not taken branch. If sequence of histories repeats itself, we claim that the system reaches stability.

History Register Global HR Per Branch BHR History Register אחד גלובלי משותף לכל הוראות ה-Branch. (עשוי להיות יעיל בתפיסת תלויות בין הוראות branch) Per Branch BHR BHR לכל הוראת branch, ואז ה-BHR לוקאלי (עשוי לעלות על תבנית חוזרת של הוראות branch - למשל לולאות מקוננות).

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

טבלא ו-BHR לוקלים History Cache (BHRs) 2-bit-sat counter array Branch IP tag history prediction 2-bit-sat counter array History Cache (BHRs) טבלא ו-BHR לוקלים נניח טבלת היסטוריות בת 1024 כניסות, עם היסטוריות באורך 4, Fully Associative נניח שכתובת היא בת 32 סיביות וכל ההוראות הן aligned כך שניתן להשמיט את שתי הסיביות ה-lsb. מהו גודל טבלת ההיסטוריות? 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 תרגום:

דוגמת הרצה: Addi r5, r0, 5 Addi r1,r0,100 L1: Addi r2, r0, 2 WT 0 WT 12 WT 1 WT 2 WT 3 WT 4 WT 5 WT 6 WT 7 WT 8 WT 9 WT 10 WT 11 WT 13 WT 14 WT 15 WT 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 IP1 IP3 IP2 IP3

טעות בחיזוי (לא הייתה קפיצה) r1 r2 r3 100 2 WNT 0 WT 12 WT 1 WT 2 WT 3 WT 4 WT 5 WT 6 WT 7 WT 8 WT 9 WT 10 WT 11 WT 13 WT 14 WT 15 WT 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

Addi r5, r0, 5 Addi r1,r0,100 L1: Addi r2, r0, 2 L2: Mod r3, r1, r2 WT 0 WT 12 WT 1 WT 2 WT 3 WT 4 WT 5 WT 6 WT 7 WT 8 WT 9 WT 10 WT 11 WT 13 WT 14 WT 15 WT 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

חיזוי נכון (הייתה קפיצה) r1 r2 r3 100 3 ST 0 WT 12 WT 1 WT 2 WT 3 WT 4 WT 5 WT 6 WT 7 WT 8 WT 9 WT 10 WT 11 WT 13 WT 14 WT 15 WT 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 1 IP2 IP3

Addi r5, r0, 5 Addi r1,r0,100 L1: Addi r2, r0, 2 L2: Mod r3, r1, r2 WNT 0 WT 12 WT 1 WT 2 WT 3 WT 4 WT 5 WT 6 WT 7 WT 8 WT 9 WT 10 WT 11 WT 13 WT 14 WT 15 WT 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 1 IP2 IP3

טעות בחיזוי (הייתה קפיצה) r1 r2 r3 100 3 1 WT 0 WT 12 WT 1 WT 2 WT 3 WT 4 WT 5 WT 6 WT 7 WT 8 WT 9 WT 10 WT 11 WT 13 WT 14 WT 15 WT 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 1 IP1 1 IP2 IP3

Addi r5, r0, 5 Addi r1,r0,100 L1: Addi r2, r0, 2 L2: Mod r3, r1, r2 4 1 ST 0 WT 12 WT 1 WT 2 WT 3 WT 4 WT 5 WT 6 WT 7 WT 8 WT 9 WT 10 WT 11 WT 13 WT 14 WT 15 WT 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 1 IP1 1 IP2 IP3

חיזוי נכון (הייתה קפיצה) r1 r2 r3 100 4 1 ST 0 WT 12 WT 1 WT 2 WT 3 WT 4 WT 5 WT 6 WT 7 WT 8 WT 9 WT 10 WT 11 WT 13 WT 14 WT 15 ST WT 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 1 IP1 1 IP2 IP3

Addi r5, r0, 5 Addi r1,r0,100 L1: Addi r2, r0, 2 L2: Mod r3, r1, r2 4 WT 0 WT 12 WT 1 WT 2 WT 3 WT 4 WT 5 WT 6 WT 7 WT 8 WT 9 WT 10 WT 11 WT 13 WT 14 WT 15 WT 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 1 IP1 1 IP2 IP3

טעות בחיזוי (לא הייתה קפיצה) r1 r2 r3 100 4 WT 0 WT 12 WT 1 WT 2 WT 3 WT 4 WT 5 WT 6 WT 7 WT 8 WT 9 WT 10 WT 11 WT 13 WT 14 WT 15 WNT WT 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 1 IP1 1 IP2 IP3

Addi r5, r0, 5 Addi r1,r0,100 L1: Addi r2, r0, 2 L2: Mod r3, r1, r2 ST 0 WT 12 WT 1 WT 2 WT 3 WT 4 WT 5 WT 6 WT 7 WT 8 WT 9 WT 10 WT 11 WT 13 WT 14 WT 15 ST WT 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 1 IP1 1 IP2 IP3

טעות בחיזוי (לא הייתה קפיצה) r1 r2 r3 100 5 ST 0 WT 12 WT 1 WT 2 WNT 3 WT 4 WT 5 WT 6 WT 7 WT 8 WT 9 WT 10 WT 11 WT 13 WT 14 WT 15 ST WT 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 1 IP1 1 IP2 IP3

Addi r5, r0, 5 Addi r1,r0,100 L1: Addi r2, r0, 2 L2: Mod r3, r1, r2 99 5 WT 0 WT 12 WT 1 WT 2 WT 3 WT 4 WT 5 WT 6 WT 7 WT 8 WT 9 WT 10 WT 11 WT 13 WT 14 WT 15 WT 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 1 IP1 1 IP2 IP3

חיזוי נכון (הייתה קפיצה) r1 r2 r3 99 5 ST 0 WT 12 WT 1 WT 2 WT 3 WT 4 WT 5 WT 6 WT 7 WT 8 WT 9 WT 10 WT 11 WT 13 WT 14 WT 15 WT 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 1 IP1 1 IP2 1 IP3

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

דוגמת הרצה: Addi r5, r0, 5 Addi r1,r0,100 L1: Addi r2, r0, 2 Global table r1 r2 r3 100 2 WT 0 WT 12 WT 1 WT 2 WT 3 WT 4 WT 5 WT 6 WT 7 WT 8 WT 9 WT 10 WT 11 WT 13 WT 14 WT 15 WT 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

טעות בחיזוי (לא הייתה קפיצה) Global table r1 r2 r3 100 2 WNT 0 WT 12 WT 1 WT 2 WT 3 WT 4 WT 5 WT 6 WT 7 WT 8 WT 9 WT 10 WT 11 WT 13 WT 14 WT 15 WT 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

Addi r5, r0, 5 Addi r1,r0,100 L1: Addi r2, r0, 2 Mod r3, r1, r2 Global table r1 r2 r3 100 3 WNT 0 WT 12 WT 1 WT 2 WT 3 WT 4 WT 5 WT 6 WT 7 WT 8 WT 9 WT 10 WT 11 WT 13 WT 14 WT 15 WT 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

טעות בחיזוי (הייתה קפיצה) Global table r1 r2 r3 100 3 WT 0 WT 12 WT 1 WT 2 WT 3 WT 4 WT 5 WT 6 WT 7 WT 8 WT 9 WT 10 WT 11 WT 13 WT 14 WT 15 WT 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 1

Addi r5, r0, 5 Addi r1,r0,100 L1: Addi r2, r0, 2 Mod r3, r1, r2 Global table r1 r2 r3 100 3 1 WT 0 WT 12 WT 1 WT 2 WT 3 WT 4 WT 5 WT 6 WT 7 WT 8 WT 9 WT 10 WT 11 WT 13 WT 14 WT 15 WT 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 1

חיזוי נכון (הייתה קפיצה) Global table r1 r2 r3 100 3 1 WT 0 WT 12 WT 1 WT 2 WT 3 WT 4 WT 5 WT 6 WT 7 WT 8 WT 9 WT 10 WT 11 WT 13 WT 14 WT 15 ST WT 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 1

Addi r5, r0, 5 Addi r1,r0,100 L1: Addi r2, r0, 2 Mod r3, r1, r2 Global table r1 r2 r3 100 4 1 WT 0 WT 12 WT 1 WT 2 WT 3 WT 4 WT 5 WT 6 WT 7 WT 8 WT 9 WT 10 WT 11 WT 13 WT 14 WT 15 ST WT 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 1

חיזוי נכון (הייתה קפיצה) Global table r1 r2 r3 100 4 1 WT 0 WT 12 WT 1 WT 2 ST 3 WT 4 WT 5 WT 6 WT 7 WT 8 WT 9 WT 10 WT 11 WT 13 WT 14 WT 15 ST WT 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 1

Addi r5, r0, 5 Addi r1,r0,100 L1: Addi r2, r0, 2 Mod r3, r1, r2 Global table r1 r2 r3 100 4 WT 0 WT 12 WT 1 WT 2 ST 3 WT 4 WT 5 WT 6 WT 7 WT 8 WT 9 WT 10 WT 11 WT 13 WT 14 WT 15 ST WT 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 1

טעות בחיזוי (לא הייתה קפיצה) Global table r1 r2 r3 100 4 WT 0 WT 12 WT 1 WT 2 ST 3 WT 4 WT 5 WT 6 WT 7 WT 8 WT 9 WT 10 WT 11 WT 13 WT 14 WT 15 ST WT WNT 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 1

Addi r5, r0, 5 Addi r1,r0,100 L1: Addi r2, r0, 2 Mod r3, r1, r2 Global table r1 r2 r3 100 5 WT 0 WT 12 WT 1 WT 2 ST 3 WT 4 WT 5 WT 6 WT 7 WT 8 WT 9 WT 10 WT 11 WT 13 WT 14 WT 15 ST WT WNT 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 1

טעות בחיזוי (לא הייתה קפיצה) Global table r1 r2 r3 100 5 WT 0 WT 12 WT 1 WT 2 ST 3 WT 4 WT 5 WT 6 WT 7 WT 8 WT 9 WT 10 WT 11 WT 13 WT 14 WT 15 ST WT WNT 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 1

Addi r5, r0, 5 Addi r1,r0,100 L1: Addi r2, r0, 2 Mod r3, r1, r2 Global table r1 r2 r3 99 5 WT 0 WT 12 WT 1 WT 2 ST 3 WT 4 WT 5 WT 6 WT 7 WT 8 WT 9 WT 10 WT 11 WT 13 WT 14 WT 15 ST WT WNT 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 1

חיזוי נכון (הייתה קפיצה) Global table r1 r2 r3 99 5 WT 0 ST 12 WT 1 WT 2 ST 3 WT 4 WT 5 WT 6 WT 7 WT 8 WT 9 WT 10 WT 11 WT 13 WT 14 WT 15 ST WT WNT 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 1

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

local Predictor: LShare Lshare combines the local history information with the branch IP This Xor is a significant improvement h h l.s.bits of IP history cache tag history prediction = msb of counter Branch IP 2-bit-sat counter array

Chooser The chooser may also be indexed by the GHR Prediction Bimodal or Local M X U Prediction Branch IP Global +1 if Bimodal / Local correct and Global wrong -1 if Bimodal / Local wrong and Global correct Chooser array (an array of 2-bit sat. counters). The chooser may also be indexed by the GHR

דוגמא: 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; } 1 2 3 4 5 6

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

תוצאות חיזוי נכון (היסטוריה של 5 הוראות) 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 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 Error is 3 cycles Branch every 5 instruction 1 000 000 instructions Perfect predictor: 1 000 005 Bimodal: 1 000 005 + 1 000 000/5 * 3 * (1-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