Question bank — Register renaming
5.3.4 · D5· Hardware › Advanced Microarchitecture › Register renaming
Yeh page ek misconception hunter hai. Neeche har item ek aisi jagah ko target karta hai jahan students sochte hain ki unhe Register renaming samajh aa gaya, lekin unke dimag mein ek subtly galat picture hoti hai. Prompt padho, apna jawab ek reason ke saath zor se bolo, phir reveal karo. Agar tumhara justification diye gaye se alag hai — chahe tumhara yes/no match kare — toh tumne ek aisa gap dhundha jo close karne layak hai.
Shuru karne se pehle, chaar words jinpar hum lagaataar rely karte hain, plain English mein restated taaki koi assumption na ho:
- Architectural register — ek naam jo programmer/compiler likhta hai (jaise
R1). Yeh ek label hai, storage box nahi. - Physical register — hardware mein ek actual storage box (jaise
P0). Yahan number sach mein rehta hai. - RAT (Register Alias Table) — ek chhoti si lookup table jo kehti hai "abhi, label
R1ka matlab boxP2hai." Renaming kuch nahi hai sirf is table ko edit karna jab instructions decode hoti hain. - ROB (Reorder Buffer) — ek queue jo har us instruction ko yaad rakhti hai jo abhi "in flight" hai (decoded lekin abhi finalize nahi hui), program order mein. Yeh har instruction ki purani register mapping store karta hai taaki mistakes undo kar sake aur results sahi order mein finalize ("commit") kar sake. Poori detail Reorder Buffer (ROB) mein hai.
Teen bookkeepers ki ek picture
Is page ki har cheez teen chhoti structures tak aati hai jo physical boxes ek doosre ko pass karti hain. Neeche ki figure unki jobs aur ek box ke unke beech move karne ka tarika dikhati hai — jawab dene se pehle ek nazar daalo, aur jab bhi koi item RAT, free list, ya ROB ka zikr kare, iske paas wapas aao.
Ownership ke arrows notice karo: ek box free list chhhod deta hai jab destination allocate hota hai (orange), RAT uski taraf point karta hai jab tak yeh ek label ki current value hai (blue), ROB pichle box ko commit tak hold karta hai, aur commit par purana box wapas free list mein push hota hai (green). Har physical box hamesha in homes mein se exactly ek mein hota hai.
R1 → P0 → P2 ki kahani, step by step
Parent note baar baar ek hi example ki taraf wapas jaata hai: teen instructions jo sab R1 likhti hain. Dekho ki label R1 kis box ki taraf point karta hai jab hum unhe decode karte hain — yeh ek figure neeche ke aadhe reveals ke peeche ki intuition hai.
Conclusion: R1 the label ek cheez hai, lekin teen instructions ke baad iska matlab teen alag physical boxes hai (P10 → P0 → P2). Jo reader purana R1 chahta tha (the MUL) wo P0 padhta rehta hai; baad ka writer P2 mein likhta hai. Alag boxes, zero conflict — yahi poora trick hai.
Har cheez kab hoti hai
Kai "ordering trap" items depend karte hain kab ek instruction ki life mein source-read, rename, execute, aur commit hoti hai. Neeche ki timeline us order ko ek baar fix karti hai taaki tum traps ke baare mein reason kar sako.
Ise left se right padho: sources RAT se padhe jaate hain aur destination rename hoti hai decode par (program order mein), execution out of order aur kaafi baad ho sakti hai, lekin purane box ki free hone ki baari commit tak (wapas program order mein) wait karti hai. Har edge case ke liye yeh strip yaad rakho.
True ya false — justify karo
Register renaming RAW (true) dependencies bhi hata deta hai.
Agar do instructions ek hi architectural register mein likhti hain, toh ek write wasteful kaam hai jise hardware skip kar sakta hai.
Renaming ke baad, MUL R4,R1,R5 aur ADD R1,R6,R7 ke beech R1 par WAR hazard physically abhi bhi exist karta hai, hum sirf ise hide karte hain.
P0 padhta hai aur ADD ek brand-new box P2 mein likhta hai (figure s02 dekho). Do alag boxes conflict nahi kar sakte — hide karne ke liye kuch bacha hi nahi.RAT registers ki values store karta hai.
Ek physical register us instruction ke execute hote hi free kiya ja sakta hai jo usme likhti hai.
Renaming useful hone ke liye out-of-order execution zaroori hai.
Kafi saare architectural registers ke saath, ek smart compiler renaming ko unnecessary bana deta hai.
Har physical register, kisi bhi instant par, exactly ek mein hota hai: free list, RAT dwara mapped, ya ROB mein purani mapping ke roop mein hold kiya gaya.
Renaming program jo results compute karta hai unhe badal deta hai.
Error dhundho
"Hum sources ki current values dhundhne ke liye free list se sources padhte hain."
"Commit par hum naye physical register ko free list mein push karte hain."
"Kyunki P0 aur P2 alag boxes hain, I2 (jo P0 padhta hai) aur I3 (jo P2 mein likhta hai) ka RAW dependency hai."
"Hum destination box ko sources padhne se pehle allocate karte hain, taaki destination fresh ho."
R1 = R1 + R2), toh update ke baad padhna galat box pakad lega."Physical register count ka minimum bas ROB size hai."
"Register pressure ka matlab hai physical register file physically overheat ho rahi hai."
"Renaming hazards eliminate karta hai, isliye Reorder Buffer (ROB) precise exceptions ke liye ab zaroori nahi."
Why questions
Hum ROB mein purani mapping kyun record karte hain instead of sirf RAT ko overwrite karke bhool jaane ke?
Hum purane physical register ko execute-time par free kyun nahi kar sakte instead of commit-time par?
Bina renaming ke WAW execution kyun block karta hai, jabki sirf last write "matter" karti hai?
Ek single instruction ke liye RAT read aur write dono kyun hota hai?
Physical register counts powers of two kyun hote hain (jaise 256)?
Renaming Superscalar Execution mein specifically kyun help karta hai?
Edge cases
Instruction R1 = R1 + R1 — same register dono sources aur destination ke roop mein. Kya hoga?
Jab ek nayi instruction ek destination box chahti hai tab free list khaali hai.
Ek register likhaa jaata hai lekin program khatam hone se pehle dobara nahi padha jaata.
Ek instruction rename hoti hai lekin phir ek branch mispredict commit se pehle use khatam kar deta hai.
Ek hi memory address par load aur store — kya renaming unki ordering resolve karta hai?
Do independent instructions dono alag architectural registers mein likhti hain — kya koi renaming interaction zaroori hai?
Ek instruction ek architectural register padhti hai jise kisi bhi earlier in-flight instruction ne nahi likha.
Recall Fast self-test
Is page par sabse zyada miss ki gayi idea ::: ==Purane boxes commit par free hote hain, execute par nahi==, kyunki precise exceptions ko abhi bhi purani value ki zaroorat pad sakti hai (timeline s03). Doosri sabse zyada miss ki gayi idea ::: Sources RAT se padhe jaate hain aur destinations free list se pull ki jaati hain — do alag structures do alag jobs ke saath (figure s01).
Related deep material: Tomasulo's Algorithm (reservation stations ke through renaming), Scoreboarding (ek purani scheme jo false hazards par stall karti hai instead of unhe rename karne ke), aur parent Register renaming.