Branch Target Buffer (BTB) ek specialized cache hai jo recently execute hue branch instructions ke predicted target addresses store karta hai. Yeh branch predictors ke saath milkar kaam karta hai taaki branch instruction ko decode karne se pehle uska target predict kiya ja sake — iska matlab hai taken branches ke liye same-cycle prediction possible ho jaati hai.
Yeh kyun important hai: BTB ke bina, agar hum predict bhi kar lein ki branch liya jayega, tab bhi humein decode stage tak wait karna padta hai yeh jaanne ke liye ki kahan jump karna hai. Isse 1-2 cycle ki penalty aati hai. BTB humein predicted target se immediately fetch karne deta hai.
BTB yeh store NAHI karta ki branch liya jayega ya nahi — yeh branch predictor ka kaam hai. BTB sirf yeh jawaab deta hai: "Agar taken ho, toh hum kahaan jayenge?"
PC fetch stage pe aata hai
↓
BTB lookup (I-cache ke parallel mein)
↓
├─ BTB Miss → Default next PC use karo (PC+4)
│ (Branch nahi hai, ya pehle kabhi dekha nahi)
│
└─ BTB Hit → Target address mil gayi
↓
Branch Predictor: Taken?
├─ Predicted NOT taken → PC+4
└─ Predicted TAKEN → BTB target use karo
Critical insight: BTB lookup aur branch prediction parallel mein hote hain, same cycle mein. Processor decode ka wait nahi karta.
Call: Target instruction mein hota hai (BTB bahut acha kaam karta hai)
Return: Target har call ke saath change hota hai (BTB constantly alias karta)
Solution: Returns ke liye dedicated Return Address Stack (RAS), baaki branches ke liye BTB. Kai designs ret instructions detect karte hain aur BTB ki jagah RAS query karte hain.
Recall Feynman Technique: Ek 12-saal ke bacche ko explain karo
Socho tum ek video game khel rahe ho jahan tum baar baar alag levels pe jump karte ho. Tumhara character automatically aage bhaagta hai, aur jab tum "jump portal" pe padte ho, tum naye level pe teleport ho jaate ho.
Problem yeh hai: Tumhara character itni tezi se bhaagta hai ki jab tak tumhara dimaag portal dekhe aur decide kare kahan jump karna hai, tab tak tum aage nikal chuke hote ho! Tumhe wapas jaana padta hai aur dobara try karna padta hai (slow!).
BTB ek cheat sheet ki tarah hai jo tum khelate waqt banate ho: "Red portal → Level 5, Blue portal → Level 12." Ab jab tum portal ke paas aate ho, tum immediately jump kar sakte ho kyunki tum pehle se jaante ho kahan jaata hai. Sign padhne ke liye slow hone ki zaroorat nahi!
Kabhi kabhi tumhari cheat sheet galat hoti hai (portal change ho gayi, ya tumne galat level likh diya), aur tum galat jagah jump kar jaate ho. Phir tumhe wapas jaana padta hai, notes fix karne padte hain, aur dobara try karna padta hai. Lekin zyaadatar baar tumhari cheat sheet sahi hoti hai, aur tum game mein super fast zoom karte ho!
Speculative Execution: BTB branch targets pe aggressive speculation enable karta hai
Cache Organization: BTB similar set-associative structures use karta hai
Branch Delay Slots: BTB ka purana alternative (delay software ko expose karo)
#flashcards/hardware
Branch Target Buffer (BTB) kya store karta hai? :: Recently execute hue branch instructions ke predicted target addresses (NOT ki branch taken hogi ya nahi — yeh predictor ka kaam hai).
Hum decode stage tak branch targets ke liye wait kyun nahi kar sakte?
Decode fetch ke 1-2 cycles baad hota hai. Wait karne se har taken branch pe guaranteed penalty aati hai, chahe perfectly predicted ho. BTB yeh wait eliminate karta hai.
BTB ko kaise index aur access kiya jaata hai?
PC ke lower bits se indexed kiya jaata hai (jaise bits [9:2] 256 entries ke liye). Sahi branch verify karne ke liye upper PC bits se tag compare hota hai. Hit pe target address return hota hai.
BTB miss pe kya hota hai?
Processor assume karta hai ki yeh branch nahi hai aur PC+4 (sequential) fetch karta hai. Agar yeh branch nikle, toh decode ke baad pipeline flush hota hai aur BTB update hota hai.
BTB aliasing kya hai aur kyun hoti hai?
Jab do alag branches ek hi BTB index pe map ho jaayein. Hoti hai kyunki BTB ki limited size hoti hai aur indexing ke liye sirf kuch PC bits use hote hain. Tag comparison aliasing detect karta hai (miss cause karta hai), lekin performance degrade hoti hai.
BTB hit + branch predictor "not taken" kehta hai → kya hota hai?
PC+4 se fetch karo (sequential). BTB target ignore hota hai. Target use karne ke liye dono conditions true honi chahiye: BTB hit AND predicted taken.
BTB branch penalty ko 2 cycles se 0 kyun reduce karta hai?
BTB fetch stage mein target address provide karta hai (decode se pehle), jisse branch predicted taken hone par immediately target se fetch ho sake. Koi decode wait nahi chahiye.
Function returns ke liye BTBs achhe se kaam kyun nahi karte?
Returns ke variable targets hote hain (call site pe depend karta hai). Alag calls alag return addresses push karti hain, jisse massive aliasing hoti hai. Dedicated Return Address Stack (RAS) use karo.
2-way set-associative BTB kya hota hai?
Har BTB index mein 1 ki jagah 2 entries hoti hain. Same index wale 2 alag branches coexist kar sakte hain. Aliasing reduce hoti hai, 2 parallel tag comparisons ki cost pe.
Modern processors mein typical BTB size?
L1 BTB ke liye 512-2048 entries (1-cycle access). Kuch ke paas bada L2 BTB bhi hota hai (4K-8K entries, 2+ cycles). Hit rate aur access latency ke beech trade-off.