5.3.3 · D5 · HinglishAdvanced Microarchitecture
Question bank — Tomasulo's algorithm
5.3.3 · D5· Hardware › Advanced Microarchitecture › Tomasulo's algorithm
Traps se pehle, teen words jinhe hum baar baar use karte hain:
True or false — justify karo
True or false: Tomasulo true (RAW) data dependencies hata deta hai.
False — yeh sirf false name dependencies (WAR/WAW) hata ta hai. Ek true read-after-write dependency real data flow hai, isliye consumer ko genuinely producer ke CDB broadcast ka wait karna padta hai.
True or false: Agar do instructions ek hi register mein likhti hain, Tomasulo unhe program order mein execute karwaata hai.
False — woh kisi bhi order mein execute ho sakte hain. Ordering sirf register ke final tag par enforce hoti hai: jis writer ka naam register ke tag mein abhi hai, sirf uska broadcast accept hoga; doosra simply ignore ho jaata hai.
True or false: Jab ek operand ka tag reservation station mein copy ho jaata hai, uske baad us register ke tag mein hone wale changes us waiting instruction ko affect karte hain.
False — RS snapshot Issue par freeze ho jaata hai. Yeh specific tag ka wait karta hai jo usne copy kiya tha, isliye baad mein register ka tag overwrite karna (WAR situation) use disturb nahi kar sakta.
True or false: CDB sirf us instruction ko result broadcast karta hai jise sabse zyada zaroorat hai.
False — yeh sab ko broadcast karta hai. Har RS aur register simultaneously sunta hai, kyunki Issue time par hardware nahi jaanta ke kitni future instructions yeh value use karengi.
True or false: Ek instruction us cycle mein hi Execute start kar sakti hai jis cycle mein uska last operand CDB par aata hai.
True — RS us cycle mein broadcast value latch karta hai aur apna
Q field clear karta hai, isliye dono Q fields NULL hone par yeh immediately start ho sakta hai bina ek fresh clock edge ka "notice" lene ke liye wait kiye.True or false: Tomasulo kaam karne ke liye reorder buffer chahiye.
False — classic algorithm mein koi ROB nahi hota; yeh results directly registers mein commit karta hai. ROB ek baad ka addition hai jo precise exceptions aur speculation recovery bhi deta hai.
True or false: Tomasulo aur scoreboarding dono WAR hazards par stall karte hain.
False — scoreboarding ek write ko tab tak stall karta hai jab tak earlier reads finish na ho jaayein (WAR stall); Tomasulo WAR ko renaming se completely eliminate karta hai, isliye writers kabhi earlier readers ka wait nahi karte.
True or false: Agar koi reservation station free nahi hai, instruction phir bhi issue ho jaati hai lekin register file ke andar wait karti hai.
False — full RS pool ek structural hazard hai; instruction Issue par stall karti hai aur in-order front end ko block karti hai jab tak koi slot free na ho.
True or false: Jis register ka tag field NULL ho, woh abhi ek valid, usable value hold karta hai.
True —
NULL tag matlab "koi producer pending nahi," isliye RegFile[r].value live value hai. Non-NULL tag matlab register ek IOU hai jo us RS ka wait kar raha hai.Error pakdo
Statement: "Jab Mult1 finish karta hai aur broadcast karta hai, register R1 ko value accept karni hi chahiye kyunki Mult1 ne R1 likha tha." — flaw dhundo.
R1 broadcast sirf tab accept karta hai jab R1 ka tag abhi bhi
Mult1 ke barabar ho. Agar kisi baad ki instruction ne R1 ko retag kar diya (say Add2 ko), toh R1 Mult1 ka result ignore karta hai — woh purani write rename ho chuki thi.Statement: "Ek instruction jiska Qj = NULL aur Qk = Add1 hai, execute karne ke liye ready hai." — flaw dhundo.
Yeh ready nahi hai. Execution ke liye dono
Qj = NULL aur Qk = NULL chahiye; ek missing operand (Qk abhi bhi Add1 ka wait kar raha hai) ise block karta hai, kyunki B ke bina A + B compute nahi kar sakte.Statement: "Issue par hum har baar register file se dono operand values read karte hain." — flaw dhundo.
Sirf tab jab source register ka tag
NULL ho. Agar source abhi pending hai (tag set hai), toh hum value nahi balki tag copy karte hain — value abhi exist hi nahi karti, isliye hum IOU record karte hain.Statement: "Tomasulo performance improve karta hai har functional unit ko faster banake." — flaw dhundo.
Yeh unit latency mein kuch nahi badalta (ek DIV abhi bhi apne 40 cycles lega). Yeh throughput badhata hai independent instructions ko overlap karne aur early start karne deke, ILP extract karka.
Statement: "Reservation station mein stored destination tag us register ka naam hai jo likha ja raha hai." — flaw dhundo.
Destination tag RS ka apna naam hai (jaise
Add1), register naam nahi. Wahi RS naam precisely woh temporary rename hai jo poori machine mein register naam ki jagah leta hai.Statement: "Kyunki sab CDB ko sunta hai, hum ek cycle mein kai results broadcast kar sakte hain." — flaw dhundo.
Ek single CDB ek cycle mein ek broadcast channel hai — yeh ek structural bottleneck hai. Agar do units ek saath finish karein, ek ko wait karna padta hai, isliye real designs mein multiple CDBs ho sakte hain.
Why questions
Issue par value ke exist hone tak stall karne ki bajaye tag copy kyun karte hain?
Kyunki producer abhi bhi mid-execution mein ho sakta hai. Tag ek forward-looking IOU hai jo consumer ko abhi issue hone deta hai aur baad mein CDB se value lene deta hai, pipeline ko flowing rakhta hai.
Tomasulo specific consumers ko route karne ki bajaye sabhi reservation stations ko broadcast kyun karta hai?
Issue time par yeh unknown hota hai ke kisi result ke future consumers kitne honge (zero bhi ho sakte hain, paanch bhi). Broadcast-and-latch scheme ek consumer list per producer maintain karne se simpler hai.
WAW hazards eliminate karne ke liye Write par "kya tag abhi bhi is RS ko point karta hai" check karna kyun zaroori hai?
Do instructions same register ko target kar sakti hain; sirf latest writer ko win karna chahiye. Tag check register ko sirf us broadcast ko accept karne deta hai jiska RS naam woh abhi hold karta hai, stale write ko silently discard karta hai.
Koi SUB jo program order mein MUL ke baad aata hai, pehle execute kyun start ho sakta hai?
Agar
SUB ke operands ready hain aur use apna RS milta hai, toh shared register par uski false (name) dependency rename ho jaati hai, isliye kuch bhi use earlier MUL ka wait karne par majboor nahi karta. Yeh out-of-order execution hai action mein.Tomasulo WAR hazards par scoreboard ki tarah stall kyun nahi karta?
Baad wala writer ek fresh RS tag paata hai, aur earlier reader ne ya toh value ya purana producing tag Issue par freeze kar liya tha. Reader register ke tag ke change hone se immune hai, isliye writer ko wait nahi karna padta.
Ek single reservation station naam "register" ki tarah kaise kaam kar sakta hai?
Kyunki dependencies tag matching se resolve hoti hain, register names se nahi. RS naam ek pending value ko uniquely identify karta hai, jo chote architectural register set se kahin zyada distinct names deta hai — yahi hardware register renaming hai.
Edge cases
Edge case: Ek instruction issue hoti hai aur dono source registers already valid values hold karte hain. Kya hota hai?
Dono
Q fields NULL set ho jaate hain aur dono V fields Issue par load ho jaate hain, isliye instruction immediately execute-ready hai aur agle hi cycle mein start ho sakti hai — bilkul bhi CDB wait nahi.Edge case: CDB par ek result broadcast hota hai lekin koi bhi RS aur koi bhi register us tag ke liye sunta nahi.
Broadcast harmless hai — yeh kahin bhi latch nahi hota. Yeh tab hota hai jab koi write poori tarah rename ho gayi ho (dead result), isliye value correctly discard ho jaati hai.
Edge case: Ek instruction ke dono source operands ek hi producing RS par depend karte hain (jaise ADD R4, R1, R1).
Dono
Qj aur Qk wahi same tag hold karte hain; jab CDB us par broadcast karta hai, dono fields match karte hain aur same cycle mein fill ho jaate hain, phir execution normally proceed karta hai.Edge case: Ek instruction ek aisi value par depend karti hai jo kabhi produce nahi hogi (source register tag ek aisi RS ko point karta hai jo flush ho gayi).
Classic non-speculative algorithm mein yeh arise hi nahi ho sakta, kyunki tags sirf live producers par set hote hain aur broadcast par clear hote hain; deadlock-free progress is baat par rely karta hai ke har set tag eventually broadcast kare.
Edge case: Wahi register ek single later instruction pair dwara zero cycles ke beech read aur phir overwrite hota hai. Kya renaming phir bhi correctness preserve karta hai?
Haan — har write ko apne Issue par ek distinct RS tag milta hai, aur har reader ne apne Issue moment par valid tag freeze kar liya tha, isliye read/write ordering purely tag snapshots se preserve hoti hai.
Edge case: Ek functional unit finish karta hai lekin CDB is cycle mein doosra result carry kar raha hai.
Finished result wait karta hai (shared bus ke liye arbitration); uska RS busy rehta hai jab tak woh CDB nahi jeet leta, jo dependent instructions mein delay kar sakta hai — single-CDB design ki yeh ek real structural limit hai.
Recall One-line self-test
Woh ek sentence jo Tomasulo ko capture karta hai ::: Instructions tags (producers) par wait karti hain, kabhi register names par nahi, isliye false dependencies gayab ho jaati hain jabke true data flow CDB ke through preserve hota hai.