Worked examples — Processing-in-memory (PIM)
6.5.5 · D3· Hardware › Advanced & Emerging Architectures › Processing-in-memory (PIM)
Scenario matrix
Har PIM sizing question ultimately do quantities tak reduce hoti hai jo tumhe workload se compute karni hoti hain:
- Arithmetic intensity — compute ops per byte moved. Yahan arithmetic operations ki count hai aur bus ke paar move hone wale bytes ki count hai. Low = bandwidth-bound = PIM iske liye perfect hai. (Dekho Roofline Model.)
- Bandwidth speedup ceiling — PIM kitna zyada internal bandwidth unlock karta hai vs external bus. Yahan external bus bandwidth hai (bytes/second, memory aur CPU ke beech wire par), wo memory banks hain jo parallel mein compute kar sakte hain, aur ek bank ke andar ki bandwidth hai. Unka product woh total internal bandwidth hai jo PIM harvest karta hai.
Neeche ki matrix har possible case class enumerate karti hai jo yeh topic tumhare saamne rakh sakta hai. Baad ke saat examples mein se har ek ek row cover karta hai (ya ek row ki extreme), aur cell ke hisaab se label kiya gaya hai.
| Case | Case class | Extreme kya hai isme | Example |
|---|---|---|---|
| A | Low intensity (streaming) | → PIM badi jeet | Ex 1 |
| B | High intensity (compute-bound) | → PIM barely help karta hai | Ex 2 |
| C | Break-even | exactly roofline ridge par | Ex 3 |
| D | Degenerate: zero compute | (pure copy) → | Ex 4 |
| E | Limiting: infinite banks | , Amdahl's cap laagta hai | Ex 5 |
| F | Analog PUM accuracy | crossbar with quantization error | Ex 6 |
| G | Word problem / exam twist | energy budget, time nahi | Ex 7 |
| H | Degenerate: no data | → undefined | Ex 8 |

Example 1 — Case A: streaming, bahut low intensity
- Compute ops count karo. Har element par ek add → . Yeh step kyun? Intensity ops-per-byte hai; pehle op count chahiye.
- Bytes moved count karo.
bread,cread,awrite = 3 accesses × 4 bytes × = bytes. Kyun? Bus cost har byte se set hoti hai jo cross karti hai, reads aur writes dono. - Intensity compute karo. ops/byte. Kyun? Yeh chota number humein red ridge ke kaafi left mein dalta hai → bandwidth-bound.
- Internal bandwidth. GB/s. Kyun? Har bank parallel mein compute karta hai; unki internal bandwidths add hoti hain (DRAM Organization (banks, rows)).
- Speedup ceiling. . Kyun nahi? Kyunki per-bank bandwidth () bus () se neeche hai; jeet aggregate internal aur external ka ratio hai, bank count nahi.
Verify: Units: ✓ dimensionless speedup ✓. Sanity: correctly ek bandwidth-bound streaming kernel flag karta hai — exactly jo PIM target karta hai. modest hai par real hai. Parent ke Worked Example 2 se match karta hai.
Example 2 — Case B: dense matmul, high intensity (PIM barely helps)
- Ops. Ek dense matmul FLOPs karta hai (har inner term par ek multiply + ek add): . Kyun? output cells, har ek ek -length dot product = MACs = flops.
- Bytes (naïve, no reuse counted). Teen matrices: bytes. Kyun? Hum A, B, aur C ek ek baar move karte hain — minimum traffic yahi hai.
- Intensity. ops/byte. Kyun? Yeh red ridge ke kaafi right mein hai → compute-bound.
- Verdict. Har byte ~167 ops feed karta hai → CPU/GPU apne ALUs busy rakhta hai aur caches memory ko hide kar dete hain. PIM ka data-movement win yahan almost invisible hai.
Verify: ✓ Ex 1 () ki opposite extreme. Ratio — do workloads roofline par ~3.3 decades apart hain, correctly ridge ke opposite sides par. Dekho Neural Network Accelerators: woh matmul ko precisely tile karte hain reuse badhane ke liye aur compute-bound rehne ke liye.
Example 3 — Case C: break-even ridge
- Dono time terms likho. Move time , compute time . Balance matlab dono equal hain. Kyun? Roofline Model ridge exactly woh crossover hai jahan do costs match karti hain.
- Equal set karo aur solve karo. . Kyun? se divide karne par raw counts intensity mein convert ho jaati hain jise hum lookup kar sakte hain. Yaad karo = peak compute rate (GFLOP/s), = bus bandwidth (GB/s).
- Numbers plug karo. ops/byte. Kyun? se neeche → bus-bound (PIM help karta hai). se upar → compute-bound (PIM meh).
- PIM ka effect. PIM effective bandwidth ko se tak raise karta hai, jo ridge ko right shift karta hai tak. Jo workloads barely compute-bound the woh bandwidth-bound zone mein wapas aa sakti hain — lekin sirf woh jo ridge ke kareeb hain.
Verify: Units: ✓. . Ex 1 () bandwidth-bound hai ✓; Ex 2 () compute-bound hai ✓ — dono classifications is ek ridge value ke saath consistent hain.
Example 4 — Case D: degenerate, zero compute (pure copy)
- Compute ops. Ek copy karta hai koi arithmetic nahi: . Kyun? Yeh intensity axis ka degenerate corner hai.
- Bytes.
bread,awrite = 2 accesses × 4 bytes × = bytes. Kyun? Movement phir bhi hoti hai — yahi is case ka poora point hai. - Intensity. ops/byte — roofline ka extreme left edge, Ex 1 se bhi neeche. Kyun? Nonzero number par zero ek clean deta hai; ratio well-defined hai (contrast: agar bhi hota, toh hota, undefined — woh corner Ex 8 mein drill hota hai).
- PIM verdict. Maximally bandwidth-bound. Lekin note karo: PIM compute karta hai, aur yahan kuch bhi compute nahi karna. Near-memory copy (in-DRAM row-clone / RowClone) phir bhi help karta hai kyunki bus kabhi cross nahi hoti; compute-style crossbar nahi karta.
Verify: ✓, intensity axis ka true floor (, ordering intact). Degenerate-input handle hua: ek defined deta hai; corner Ex 8 hai.
Example 5 — Case E: limiting behaviour, infinite banks meets Amdahl
- Bandwidth ceiling bina bound ke badhta hai. as . Kyun? Pure-bandwidth model mein kuch bhi isko cap nahi karta — yahi trap hai. Note karo sirf parallel (bandwidth-bound) part ka ceiling hai; yeh exactly woh "" hai jo hum aage Amdahl mein feed karte hain.
- Amdahl's Law laao. Overall speedup , jahan serial fraction hai aur wahi bandwidth ceiling hai step 1 se — woh ek hi part hai jise Amdahl accelerate karne deta hai. Yeh tool kyun? Amdahl exactly yeh sawaal answer karta hai "jab ek part infinitely fast ho jaaye toh program speedup kya approach karti hai?" — yahan sahi sawaal, raw bandwidth nahi.
- Limit lo. Jaise jaise , , toh speedup . Kyun? Serial speed up nahi ho sakta; baaki sab free ho jaane ke baad woh dominate karta hai.
- Interpretation. Perfect infinite-bank PIM ke saath bhi, yeh workload par cap ho jaata hai. Bus/serial residue woh wall hai.
Verify: ✓. Sanity: smaller serial fraction ke saath cap tak rise karti — monotonic aur correct. Limiting case handle hua: ek finite deta hai, infinity nahi. Parent ki warning "always Amdahl se sanity-check karo" ✓.
Example 6 — Case F: analog PUM crossbar accuracy
- Ideal current per cell (Ohm's law). : , , (mA). Ohm's law kyun? Har crosspoint literally ek resistor hai; exact device physics hai.
- Row sum karo (Kirchhoff's current law). mA. Kyun? Ek wire par milne wale currents add hote hain — woh summation hi dot product hai.
- Drift apply karo. Pehla cell drift karta hai: mS → uska current mA. Naya sum mA. Kyun? Real conductances wander karte hain; isliye PIM approximate hai, exact nahi.
- Relative error. . se kam kyun? Drift us ek term ko hit karta hai jo total ka half contribute karta hai, aur baaki terms unaffected hain — errors sum ke across dilute ho jaate hain.
Verify: Ideal mA, drifted mA, error ✓. Parent ke mistake-callout ko confirm karta hai: crossbars approximate hain, error-tolerant nets ke liye suited hain, exact finance ke liye nahi.
Example 7 — Case G: word problem / exam twist (energy, time nahi)
- Baseline energy. Move: pJ. Compute: pJ. Total pJ. Dono alag kyun karo? PIM sirf move term ko attack karta hai; alag karne se pata chalta hai yeh kitna dominant hai.
- Confirm karo ki movement dominate karta hai. vs → movement yahan compute se zyada hai. Check kyun? Agar compute dominate karta, toh movement save karna pointless hota — yeh intensity test ka energy version hai.
- PIM energy. Sirf bytes move karte hain: pJ. Compute unchanged: pJ. Total pJ. Compute unchanged kyun? PIM arithmetic ko sasta nahi banata — woh trips remove karta hai.
- Saving. . Itna bada kyun? Kyunki movement compute se zyada tha, movement cut karna ~ total energy cut karta hai.
Verify: pJ, pJ, saving ✓. Units: pJ throughout ✓. Parent ke core energy thesis ko confirm karta hai: movement ko attack karo, ALU ko nahi.
Example 8 — Case H: fully degenerate corner, bilkul data nahi
- Ratio likho. . Kyun? Yeh intensity axis ka last unvisited corner hai — numerator aur denominator dono vanish ho jaate hain.
- Ratio classify karo. indeterminate hai — mathematically undefined, na na . Yeh kyun matter karta hai? Ex 4 (clean kyunki sirf tha) ke unlike, yahan workload ko roofline par kahi bhi place nahi kar sakte — koi workload hi nahi hai.
- Physical reading. Koi bytes move nahi karte → bus kabhi bottleneck nahi thi; koi ops nahi chalte → accelerate karne ke liye kuch nahi. Dono time terms aur hain, toh total time regardless of architecture.
- PIM verdict. PIM na help karta hai na hurt: speedup bhi hai. Practice mein ek runtime guard karta hai empty inputs ke against kabhi bhi yeh poochne se pehle "kya main ise PIM karoon?" — intensity test undefined hai aur skip karna chahiye.
Verify: undefined ✓ (contrast Ex 4 ka defined ). Dono cost terms aur ✓, toh runtime kisi bhi machine par hai — empty kernel ki correct limiting reading.
Active Recall
Pure copy mein hai toh (Case D)
Infinite banks par cap karte hain kyunki
drift ne total error diya kyunki
Empty input undefined deta hai (Case H)
memcpy se alag hai jahan sirf hai toh ek clean hai