Performance scaling modern computing ka central challenge hai. Hum single cores ko bahut zyada fast nahi bana sakte (heat, power limits), isliye hum zyada cores add karte hain. Lekin kya 8 cores tumhe 8× performance deta hai? Ye laws jawab dete hain kab aur kyun nahi.
The Setup:
Tumhare paas koi computation hai jo time T leta hai
Uska ek fraction f inherently serial hai (parallelize nahi ho sakta)
Chalo total execution timeT1 se shuru karte hain ek processor par.
Step 1: Kaam ko tod do
Serial portion leta hai: Tserial=f⋅T1
Parallel portion leta hai: Tparallel=(1−f)⋅T1
Ye step kyun? Hum total kaam ko do categories mein partition kar rahe hain—parallelize ho sakta hai ya nahi. Serial fraction f ek proportion hai, isliye f⋅T1 actual time deta hai.
Step 2:n processors par time
n processors ke saath:
Serial part phir bhif⋅T1 leta hai (split nahi ho sakta!)
Parallel part ab n(1−f)⋅T1 leta hai (perfect division)
Ye step kyun? Serial kaam fundamentally sequential hai—uspe zyada processors lagane se koi faayda nahi. Parallel kaam evenly divide hota hai (ideal assumption).
Tn=f⋅T1+n(1−f)⋅T1
Step 3: Speedup define karo
Speedup single-processor time aur multi-processor time ka ratio hai:
S(n)=TnT1=f⋅T1+n(1−f)⋅T1T1
Ye step kyun? Speedup measure karta hai "kitna fast." Agar S(n)=4, toh tum 4× fast ho.
Step 4: Simplify karo
T1 factor out karo:
S(n)=f+n1−f1
Ye step kyun? Original time cancel ho jata hai—speedup sirf fractionf par depend karta hai, absolute time par nahi.
Iska matlab: Agar tumhare code ka sirf 10% bhi serial hai (f=0.1), toh best speedup jo tum kabhi bhi achieve kar sakte ho woh hai 1/0.1=10×, chahe ek million cores ho!
Imagine karo tum aur tumhare dost ek bada LEGO castle bana rahe ho. Kuch parts par tum sab ek saath kaam kar sakte ho—ek towers banata hai, doosra walls, teesra gate. Yahi parallel work hai. Lekin kuch parts sirf ek hi insaan kar sakta hai—jaise instructions zor se padhna ya sab se upar flag lagana. Yahi serial work hai.
Amdahl's Law kehta hai: agar tum exactly same castle bana rahe ho, zyada dost add karne se madad hoti hai, lekin ek hadd tak. Agar instructions padhne mein 10 minute lagte hain aur split nahi ho sakta, toh 100 dost ke saath bhi woh 10 minute toh lagengi hi. Tum infinitely fast nahi ho sakte!
Gustafson's Law kehta hai: agar tumhare paas zyada dost hain, toh tum same castle faster nahi banate—tum same time mein ek BADA castle banate ho! 10 dosto ke saath, tum 10× zyada awesome castle banate ho. Instructions padhne mein phir bhi 10 minute lagte hain, lekin ab tum ek mega-castle ke liye instructions padh rahe ho, toh worth it hai.
Seekh yeh hai: parallelism tab best kaam karta hai jab tum problem grow karo, na ki sirf same chhote kaam ko jaldi nipatao.
n processors par parallelize karne par ek fixed-size problem ke liye maximum speedup predict karna, serial fraction f ko account karte hue.
Amdahl's Law ka speedup formula kya hai?
S(n)=f+n(1−f)1 jahan f serial fraction hai aur n processors ki sankhya hai.
Amdahl's Law mein n→∞ par maximum speedup kya hai?
Smax=f1 — serial fraction absolute bottleneck ban jaata hai.
Agar program ka 5% serial hai, toh maximum possible speedup kya hai?
0.051=20× speedup, chahe kitne bhi processors add karo.
Gustafson's Law kis kaam aata hai?
Speedup predict karna jab problem size scale hoti hai processors ki sankhya ke saath (weak scaling), problem fixed rakhne ki jagah.
Gustafson's Law ka speedup formula kya hai?
S(n)=n−f(n−1) ya equivalently n+(1−n)f, jahan f serial fraction hai.
Gustafson's Law Amdahl's Law se kaise differ karta hai?
Amdahl fixed workload assume karta hai (strong scaling); Gustafson scaled workload assume karta hai (weak scaling). Gustafson large n ke liye zyada optimistic hai.
Ek program mein f=0.02 serial fraction hai. 50 cores par speedup kya hai (Amdahl)?
S(50)=0.02+0.98/501=0.02+0.01961=0.03961≈25.3×
Same program (f=0.02), 50 cores ke saath speedup (Gustafson)?
Serial fraction f execution time mein kyun measure hota hai, lines of code mein kyun nahi?
Kyunki ek single line (jaise ek lock) runtime dominate kar sakti hai agar woh threads ko wait karwaye. Time spent, na ki code volume, bottleneck decide karta hai.
Real-world mein effective serial fraction badhane wale factors kya hain?
Problem size fixed rakhna aur time kam karne ke liye zyada processors add karna—Amdahl's Law se governed.
"Weak scaling" ka matlab kya hai?
Problem size ko processors ki sankhya ke proportionally badhana taaki time constant rahe—Gustafson's Law se governed.
Amdahl's Law pessimistic kyun lagta hai?
Kyunki woh reveal karta hai ki chhote se chhote serial fractions bhi (jaise 1%) speedup ko 100× par cap kar sakte hain, infinite parallelism ko impractical banate hue.
Parallel computing mein efficiency E(n) kya hai?
E(n)=nS(n) — ideal speedup ka woh fraction jo actually achieve hua. E(n)=1 matlab perfect linear scaling.
Agar S(8)=6, toh efficiency kya hai?
E(8)=6/8=0.75 ya 75% — tum ideal 8× speedup ka 75% pa rahe ho.
Practice mein serial fraction kaise reduce karo?
Locks minimize karo (lock-free data structures use karo), serial stages pipeline karo, synchronization points kam karo, I/O optimize karo, aur sequential algorithms eliminate karo.