Worked examples — Reservation stations
5.3.6 · D3· Hardware › Advanced Microarchitecture › Reservation stations
Yeh page Reservation stations ka exhaustive drill room hai. Parent note ne aapko machinery sikhayi thi; yahan hum use har tarah ki situation ke against run karte hain jo ek reservation-station (RS) system face kar sakta hai. Shuru karne se pehle, ek waada: neeche har symbol parent note mein paida hua tha, lekin jab bhi hum use karte hain hum use fir se anchor karte hain, taaki jo reader bhool gaya ho woh picture se dubara build kar sake.
The scenario matrix
Har reservation-station problem actually inhi cells mein se ek hoti hai. Neeche hamare examples inhe sab cover karte hain, aur har example us cell ke saath label hai jo woh hit karta hai.
| # | Cell (case class) | Kya tricky banata hai | Example |
|---|---|---|---|
| C1 | Dono operands issue par pehle se ready | Degenerate: bilkul koi wait nahi | Ex 1 |
| C2 | Ek operand pending (single RAW) | Ek IOU hold karna padta hai | Ex 2 |
| C3 | Dono operands pending | Do IOUs, arrival ka order | Ex 3 |
| C4 | Do consumers ek hi result ke | Ek broadcast, kai captures | Ex 4 |
| C5 | WAW (write-after-write) same register par | Status overwrite / "dead" value | Ex 5 |
| C6 | WAR (write-after-read) false dependency | Renaming ise kyun vanish kar deta hai | Ex 6 |
| C7 | Structural hazard: RS full / do units same cycle mein finish | System stalls, limits | Ex 7 |
| C8 | Load/store address ready nahi (degenerate operand path) | Memory, two-phase execute | Ex 8 |
| C9 | Word problem (real-world sizing) | Tag bits / RS sizing count karo | Ex 9 |
| C10 | Exam twist: kya OoO committed result badalta hai? | Correctness vs. ordering | Ex 10 |
Neeche ki figure ek station ki anatomy draw karti hai — Op, Vj/Qj, Vk/Qk, Busy fields — saath mein woh CDB jo yeh snoop karta hai aur ready gate. Ise dekhte raho: neeche har example bas yahi picture hai alag-alag numbers fill hone ke saath. Magenta "snoop" arrow dekho jo bus se wapas station mein jaata hai (yahi Capture hai) aur violet ready gate neeche (Qj = 0 AND Qk = 0 → execute). Corner legend mein das cells C1–C10 listed hain taaki dekh sako har example kaun sa slot fill karta hai.

Example 1 — Cell C1: dono operands ready (the degenerate case)
Forecast: padhne se pehle guess karo — kya yeh instruction kabhi wait karni padegi?
- Issue. Ek free station allocate karo, use
Add1kaho. KyunkiStatus[R1]empty hai, value copy karo:Vj = 5,Qj = 0. KyunkiStatus[R2]empty hai,Vk = 8,Qk = 0. Yeh step kyun? Status table empty hai ⇒ koi producer desk pending nahi ⇒ hum real numbers seedha le lete hain, IOUs nahi. - Readiness check.
Qj = 0aurQk = 0→ station usi cycle mein ready hai jis cycle mein issue hua. Yeh step kyun? Readiness define hai dono IOUs cleared hone se. Snoop karne ke liye kuch nahi hai. - Execute.
5 + 8 = 13compute karo. Phir tagAdd1ke saath CDB par13Write karo. Yeh step kyun? RS ka poora point yahi hai ki no-dependency instruction zero waiting cost pay karta hai — yeh ek plain pipeline ki tarah behave karta hai.
Verify: R3 = 5 + 8 = 13. Units: sab plain register values hain (dimensionless integers), sum ek value hai → consistent. Koi IOU kabhi set nahi hua, toh "degenerate" cell ko sach mein koi CDB snoop chahiye nahi.
Example 2 — Cell C2: ek pending operand (single RAW)
Forecast: (ii) ka kaun sa field IOU hold karega — Qj ya Qk? Aur R4 mein aakhir mein kaun sa number aayega?
- Issue (i). Station
Mult1:Vj=4, Vk=6, Qj=0, Qk=0.Status[R1] = Mult1set karo. Kyun?R1ki next value ab deskMult1se aayegi; phone book mein yahi likhna chahiye. - Issue (ii). Uska operand 1
R1hai.Status[R1] = Mult1lookup karo (empty nahi!) → IOU store karo:Qj = Mult1. Operand 2R5hai, empty →Vk = 10, Qk = 0. Kyun?R1ready nahi, toh value ki jagah hum kaun produce karega yeh record karte hain. Yahi renaming hai: (ii) ab tagMult1par depend karta hai, naamR1par nahi. Mult1finish karta hai:4 * 6 = 24, CDB par(Mult1, 24)broadcast karta hai. Kyun? Ek loudspeaker announcement; har desk snoops karta hai.Add1capture karta hai. UskaQj = Mult1shouted tag se match karta hai →Vj = 24,Qj = 0set karo. AbQj=Qk=0→ execute karo24 + 10 = 34. Kyun? Capture woh moment hai jab IOU real ingredient mein badal jaata hai.
Verify: R4 = (4*6) + 10 = 34. Sanity: (ii) exactly tab tak wait kiya jab tak (i) ne apni value produce ki aur ek cycle bhi zyada nahi — correct RAW behaviour.
Example 3 — Cell C3: dono operands pending
Forecast: kya (iii) cycle 5, cycle 8, ya beech mein kahin execute karta hai?
- Issue (iii).
Status[R1]=Mult1,Status[R4]=Sub1. Dono non-empty → do IOUs:Qj=Mult1, Qk=Sub1. Abhi koiVnahi. Kyun? Dono sources in-flight hain; station ek saath do IOUs hold karta hai — yeh bilkul legal hai. - Cycle 5:
Sub1broadcast karta hai(Sub1, 15). (iii) snoops:Qkmatch karta hai →Vk=15, Qk=0. LekinQj=Mult1abhi bhi ≠ 0. Kyun? Ek IOU cleared, ek bacha ⇒ abhi ready nahi. Readiness ke liye dono chahiye. - Cycle 8:
Mult1broadcast karta hai(Mult1, 9).Qjmatch karta hai →Vj=9, Qj=0. Ab dono zero → execute karo9 + 15 = 24. Kyun? Station last-arriving operand se gate hota hai. Arrival ka order matter nahi kiya, sirf maximum.
Verify: R7 = (3*3) + (20-5) = 9 + 15 = 24. Timing sanity: execution max(5, 8) = 8 par shuru ho sakti hai, slower producer se control hota hai. ✔
Example 4 — Cell C4: ek result ke do consumers
Forecast: kya Mult1 ek baar ya do baar shout karta hai?
- Issue (ii):
Qj = Mult1(R1 ka wait),Vk=1. - Issue (iii):
Status[R1]lookup karta hai. Woh abhi bhiMult1hai (kisi ne overwrite nahi kiya) →Qj = Mult1,Vk=4. Kyun? Register read karna uska status entry nahi badalta. Toh dono consumers legitimately same IOU hold karte hain. Mult1broadcast karta hai(Mult1, 14)— EK BAAR. DonoAdd1aurSub1same cycle mein same shout snoop karte hain → dono capture karte hainVj=14, donoQjclear karte hain. Point-to-point ki jagah broadcast kyun? Issue par humein nahi pata tha kitni desks koR1chahiye. Ek announcement kitne bhi listeners ko serve karta hai — yahi reason hai CDB ek bus hai.
Verify: R4 = 14 + 1 = 15, R6 = 14 - 4 = 10. Dono ek broadcast se derive hue — ek shout, do captures. ✔
Example 5 — Cell C5: WAW hazard aur "dead" value
Forecast: kya (i) ka 6 kabhi R1 mein land karta hai?
- Issue (i):
Status[R1] = Mult1. - Issue (ii): woh bhi
R1likhta hai. Overwrite karoStatus[R1] = Add1. Phone book ab kehta hai "R1 ka newest producerAdd1hai." Kyun? Yahi WAW fix hai: latest writer register-status entry jeet jaata hai. (i) kaR1par claim ab invisible hai. - Issue (iii):
Status[R1] = Add1read karta hai →Qj = Add1(NOTMult1), aurR7ready hai tohVk = 8, Qk = 0. Kyun? (iii) program order mein (ii) ke baad aata hai, toh use (ii) kaR1dekhna chahiye. Status table ne automatically sahi tag diya. Mult1finish karta hai (6), broadcast karta hai(Mult1, 6). Register file check karta hai: kyaStatus[R1] == Mult1? Nahi, wohAdd1hai. Toh register file ise ignore karta hai. Kyun? Yahi "dead value" hai. Kisi ka bhiQj/Qk = Mult1nahi tha, tohR1ke liye yeh simply drop ho jaata hai. Correct — (i) ki write overwrite ho gayi thi.Add1finish karta hai (30), broadcast karta hai(Add1, 30). Register file check karta hai: kyaStatus[R1] == Add1? Haan. Toh wohR1 = 30likhta hai. Usi broadcast mein, (iii) ka station snoops karta hai,Qj = Add1match dekh keVj = 30capture karta hai,Qjclear karta hai. Yeh step kyun? Register file tab hi likhta hai jab broadcasting tag register ki current status entry se match kare — yahi guarantee karta hai ki register latest binding (Add1) rakhe, stale wala (Mult1) nahi. Aur (iii) usi shout par capture karta hai kyunki uske IOU meinAdd1tha; ek broadcast register file aur har waiting consumer dono ko serve karta hai ek saath (same mechanism jaise Ex 4).
Verify: final R1 = 10 + 20 = 30 (rakha gaya); (i) ki value 2*3 = 6 discard ho gayi; R6 = R1 - R7 = 30 - 8 = 22. ✔ (i) ki value kabhi R1 tak nahi pahunchi.
Example 6 — Cell C6: WAR false dependency dissolve ho jaati hai
Forecast: kya (ii) ko (i) ka wait karna padega?
- Issue (i):
R1ready hai → value seedhi le lo:Vj = 100. (i) ab apne khud ke station mein number100own karta hai. Kyun? Ek baar capture ho jaane ke baad, (i) naamR1ko bilkul reference nahi karta — uske paas ek private copy hai. - Issue (ii):
R1likhta hai →Status[R1] = Mult1. Yeh (i) ki100ki copy ko nahi touch karta. Kyun? (i) ne step 1 mein apna operand snapshot kar liya tha. (ii) kaR1ke saath naya binding ek value ko corrupt nahi kar sakta jo pehle hi copy out ho chuki hai. "False" WAR dependency gayi. - (ii) freely execute karo, chahe (i) se pehle bhi:
6*7 = 42→R1 = 42.
Verify: R3 = 100 + R2 (purana R1=100 use karta hai), jabki R1 baad mein 42 ban jaata hai. Dono executions ka order ab matter nahi karta — yahi renaming ka faida hai. R2=1 lo → R3 = 101, R1 = 42. ✔
Example 7 — Cell C7: structural hazards (limits!)
Forecast: dono mein, machine ko kya karna chahiye?
- (a) — RS full. Koi free station nahi ⇒ teesra
ADDissue nahi ho sakta aur front end stall karta hai kam se kam ek cycle ke liye. Yeh step kyun? RS data hazards eliminate karte hain, structural kabhi nahi. Agar buffer physically full hai, issue block hota hai — yahi scheme ki limiting/degenerate boundary hai. - (b) — CDB contention. Ek bus = ek broadcast per cycle. Arbiter ek result choose karta hai (maano
Mult1);Add1ko apna result hold karna padega aur next cycle mein rebroadcast karna padega. Kyun? Classic Tomasulo mein ek akela CDB hai. Do simultaneous producers ek structural hazard hai; ek ek cycle lose karta hai. (Modern designs extra CDBs add karte hain — wiring cost par.)
Verify: counting check — 2 stations aur 2 busy ke saath, free stations = 2 - 2 = 0, toh 0 < 1 needed ⇒ stall. 1 CDB aur 2 ready broadcasters ke saath, 2 > 1 ⇒ ek exactly 2 - 1 = 1 cycle defer hota hai. ✔
Example 8 — Cell C8: load jiska address abhi ready nahi
Forecast: load apna address jaanne se pehle kya karta hai?
- Issue (i). Ek integer-ALU station allocate karo; use
Add1kaho.R3aurR4dono ready hain →Vj = 1000, Vk = 24, Qj = Qk = 0.Status[R2] = Add1set karo. Yeh step kyun? Hume desk ka naam dena chahiye joR2produce karegi taaki load us par point kar sake. (i) ka allocation dikhaye bina, tagAdd1ek mystery hota. - Issue (ii).
R2pending →Status[R2] = Add1lookup karo → IOU store karo:Qj = Add1. Address fieldAabhi fill nahi ho sakta. Kyun? Load ka pehla kaam address computation hai; use pehle base value chahiye, toh woh base ko IOU ki tarah rakhta hai jaise koi bhi operand. Add1finish karta hai aur broadcast karta hai(Add1, 1024)(kyunki1000 + 24 = 1024). Load snoops karta hai,Qj = Add1match karta hai → base value capture karta hai,Qj = 0. Yeh step kyun? Load address arithmetic shuru tab tak nahi kar sakta jab tak uska base number exist na kare; CDB shout exactly woh moment hai jab woh number available hota hai, aur Capture woh tarika hai jis se load use grab karta hai (same mechanism jaise har earlier example).- Execute phase 1 — address.
A = base + offset = 1024 + 0 = 1024. Phases mein kyun split? Memory access tab tak shuru nahi ho sakta jab tak address exist na kare. Address calc ek distinct sub-step hai, pure ALU op ki tarah nahi. - Execute phase 2 — memory access, phir broadcast. Address
A = 1024par memory read karo, datum ko load ke result mein rakho, phir CDB par(load-tag, datum)broadcast karo. Yeh step kyun? Tab hi address jaana aur use karna safe hai; memory read load ka actual kaam hai, aur — kisi bhi producer ki tarah — use apna result CDB par announce karna hai taakiR5ka koi bhi consumer use capture kar sake.
Verify: effective address = base + offset = (1000 + 24) + 0 = 1024. Yahi jagah hai jahan 5.3.09-Load-store-queues check karne ke liye over leta hai ki koi earlier store address 1024 alias karta hai ya nahi. ✔
Example 9 — Cell C9: word problem (hardware sizing)
Forecast: compute karne se pehle bit count guess karo.
- Total stations
= 6 + 3 + 2 + 4 + 1 = 16. Kyun? Ek tag kisi bhi producing station ko uniquely identify kar sakna chahiye poori machine mein (CDB global hai, toh shout kahin se bhi aa sakti hai). - Bits needed
= ⌈log₂(16)⌉ = 4bits. Log ka ceiling kyun?Ndistinct cheezein label karne ke liye⌈log₂ N⌉binary digits chahiye — on/off switches ki minimum sankhya jo kam se kamNpatterns deti hai. Yahan2⁴ = 16patterns exactly 16 stations cover karte hain. - Per-station tag storage. Har station do operand tags rakhta hai (
Qj,Qk), har ek4bits →2 × 4 = 8bits of tag storage per station. Kyun?jaurkdono independently kisi station ko point karte IOU ho sakte hain, toh dono ko full tag field chahiye.
Verify: 2⁴ = 16 ≥ 16 distinct stations ✔, jabki 2³ = 8 < 16 kam hota ⇒ 4 minimal bit-width hai. Per-station tag storage = 2 × 4 = 8 bits. ✔
Example 10 — Cell C10: exam twist — kya out-of-order answer badalta hai?
Forecast: true ya false — OoO R8 mein alag value produce kar sakta hai?
- Independence check. (ii) (i) ke saath koi register share nahi karta → koi
Qlink nahi. Jab bhi operands present hote hain yeh execute ho jaata hai. Kyun? RS sirf real data dependencies serialize karte hain; unrelated instructions jab bhi operands present hon tab run karte hain. - (iii) dono par gate karta hai.
Qj = Mult1,Qk = Add1. Woh do finish times mein se baad wale ka wait karta hai, chahe kaun sa producer pehle aaya. Kyun? Correctness tag capture se aata hai, execution order se nahi. (iii) hamesha (i) aur (ii) ke actual results use karta hai. - Result.
R1 = 2*5 = 10,R4 = 1+1 = 2,R8 = 10 - 2 = 8. Kyun? (i) aur (ii) jis bhi order mein finish karein, (iii) ke do IOUs execute hone se pehle true values capture karte hain, toh woh10aur2par compute karta hai.
Verify: ek in-order machine wohi R8 = (2*5) - (1+1) = 8 compute karta hai. Out-of-order execution timing reorder karta hai, values kabhi nahi — woh guarantee (plus 5.3.07-Reorder-buffer precise exceptions ke liye) yahi reason hai trick safe hai. ✔
Recall Har example kaun sa cell cover karta hai?
C1 ready/ready — Ex 1 ::: koi wait nahi, immediate execute C2 single RAW — Ex 2 ::: ek IOU, ek baar capture C3 dono pending — Ex 3 ::: last-arriving operand se gate C4 do consumers — Ex 4 ::: ek broadcast, kai captures C5 WAW — Ex 5 ::: status overwrite, dead value drop C6 WAR — Ex 6 ::: operand snapshotted, dependency vanish C7 structural — Ex 7 ::: RS full stalls, ek CDB defer karta hai C8 load address — Ex 8 ::: two-phase execute C9 sizing — Ex 9 ::: ⌈log₂ N⌉ tag bits C10 OoO safety — Ex 10 ::: timing reorder karta hai values nahi
Connections
- Reservation stations — parent: woh machinery jinhe yeh examples exercise karte hain.
- 5.3.06 Reservation stations (Hinglish) — same drills Hinglish mein.
- 5.3.04-Scoreboarding — contrast: centralized tracking vs. hamare distributed
Q/Vdesks. - 5.3.07-Reorder-buffer — Ex 10 ki "timing-not-values" guarantee ko precise banata hai.
- 5.2.03-Register-renaming — Ex 5 (WAW) aur Ex 6 (WAR) ke peeche ka mechanism.
- 4.6.02-Pipeline-hazards — woh hazard taxonomy jis par matrix bani hai.
- 5.3.09-Load-store-queues — jahan Ex 8 memory disambiguation ke liye continue karta hai.