Chalo derive karte hain dataflow graph ko instead of ise diya hua maanein.
Final operation × hai. Isko do inputs chahiye: (x+y) aur (x−z).
(x+y) khud ek node hai: ek + jo tokens x aur y consume karta hai.
(x−z) ek − node hai jo x aur z consume karta hai.
Toh graph yeh hai:
x→[+]y→[+]⟹[+]→×x→[−]z→[−]⟹[−]→×
Firing trace (Har step kyun?):
Tokens x,y,z arrive karte hain. Kyun? Inputs starting data hain.
+ node ke paas dono inputs hain (x,y) → fires, token t1=x+y emit karta hai. Saath hi - node ke paas x,z hain → fires, t2=x−z emit karta hai. Kyun simultaneously? Dono firing rules ek saath satisfy hote hain aur nodes independent hain → hardware unhe parallel mein run karta hai.
× node ke paas ab t1,t2 hain → fires, r emit karta hai. Kyun last? Uski firing rule pehle satisfy nahi ho sakti thi kyunki uske inputs exist hi nahi karte the — data dependency order force karti hai, kuch aur nahi.
Iteration i=2 ke paas apna i-token already flow kar sakta hai jabki iteration 1 khatam ho rahi hai. Tags τ1,τ2 unhe alag rakhte hain taaki ek fast i-token kabhi galti se kisi aur iteration ke slow sum-token ke saath pair na ho jaaye.
Result: pipeline parallelism across iterations bina kisi locks ke — "matching store" hardware tabhi fire karta hai jab tags agree karte hain.
Socho ek kitchen jahan har cook ek cheez banata hai lekin sirf tab jab uske saare ingredients table par ho. Koi bell ka ya boss ke "next!" chillane ka wait nahi. Jis moment cook ke paas sab kuch hota hai, woh cook karta hai — aur bahut saare cooks ek saath kaam kar sakte hain. "Recipe" ek numbered list nahi hai; yeh arrows ki ek picture hai jo dikhati hai kis ki taiyaar dish kis ka ingredient ban jaati hai. Fancy version mein, har ingredient par ek sticker hota hai jo batata hai yeh kaunse order ka hai, taaki table 3 ka salad table 7 ke soup ke saath kabhi mix na ho.
Static mein zyaada se zyaada ek token per edge allow hota hai; dynamic tags attach karta hai taaki same graph ke kaafi concurrent instances run kar sakein.
Tagged-token dataflow mein node fire karne se pehle kya match karna zaroori hai?
Input tokens ke tags equal hone chahiye.
Dataflow "for free" parallelism kyun expose karta hai?
Independent operations mein koi connecting edge nahi hoti, toh unki firing rules independently satisfy hoti hain aur woh concurrently run karte hain.
Token kya hota hai?
Ek packet jo ek data value (aur dynamic dataflow mein, ek tag) carry karta hai jo ek edge ke along flow hota hai aur firing par consume hota hai.
Dynamic dataflow mein matching tokens ko pair karne wali hardware unit kya hai?
The matching store / matching unit.
Loop mein tags kyun zaroori hain?
Different iterations ke tokens ko galat pair hone se rokne ke liye aur iterations ko overlap karne (pipeline parallelism) ki permission dene ke liye.