6.2.9 · D3 · HinglishGPU Architecture

Worked examplesBank conflicts in shared memory

2,932 words13 min read↑ Read in English

6.2.9 · D3 · Hardware › GPU Architecture › Bank conflicts in shared memory

Yeh page Bank conflicts in shared memory ka drill floor hai. Hum ek hi master tool lete hain — bank formula aur uska conflict degree — aur isko har tarah ke access pattern pe try karte hain jab tak kuch bhi surprise nahi kar sakta.

Kuch bhi compute karne se pehle, chaliye un do tools ko dubara earn karte hain jinpe hum poore time lean karenge.

Offset conflict degree ko kabhi nahi badalta — yeh sirf har thread ko ek hi amount se slide karta hai, yeh shift karta hai ki kaun se banks use ho rahe hain, na ki kitne threads ek bank share karte hain. Ise apne paas rakh lo.


Scenario matrix

Is topic ka har access pattern in cells mein se ek mein fit hota hai. Aage ke worked examples mein har ek ko ek cell ke saath tag kiya gaya hai.

Cell Kya ise alag banata hai Covered by
A. Stride-1 (degenerate, best case) , gcd Ex 1
B. Odd stride ≠ 1 odd, coprime to 32, phir bhi conflict-free Ex 2
C. Even stride, partial conflict 32 ke saath factor share karta hai Ex 3
D. Worst case (fully serialized) 32 ka multiple, gcd Ex 4
E. Nonzero offset (sign/shift check) offset present — kya yeh answer badalta hai? Ex 5
F. 2-D array mein column walk + padding fix array shape se derived stride Ex 6 (figure)
G. AoS struct-size trap sizeof(struct) se implied stride Ex 7
H. Sub-word / broadcast (zero effective stride) saare threads → ek address (special, conflict NAHIN) Ex 8
I. Real-world word problem histogram / reduction access Ex 9
J. Exam twist (multi-word / double, ≥32 threads) 8-byte type, 4-byte banks mein reason karo Ex 10

Hum limiting behaviour bhi dekhenge: jaise powers of two se climb karta hai, har step pe conflict degree double hoti jaati hai (Ex 3 → Ex 4), aur jaise dobara odd ho jaata hai conflicts gayab ho jaate hain (Ex 2). Uska visual neeche hai.

Figure — Bank conflicts in shared memory

Worked examples

Figure — Bank conflicts in shared memory

Yeh exactly woh pattern hai jo matrix transpose optimization ke peeche hai, aur yeh aapke kernel-tuning toolkit mein memory coalescing ke bilkul saath baithta hai.


Recall Quick self-test (guess karne ke baad reveal karo)

Stride 12 — conflict degree? ::: → 4-way conflict. Stride 15 — conflict degree? ::: (15 odd hai) → conflict-free. Kya offset add karne se koi conflict degree badlta hai? ::: Nahin — offset shift karta hai ki kaun se banks use ho rahe hain, pile-up count kabhi nahin. Saare 32 threads same word read karte hain — kitne cycles? ::: 1 (broadcast), kyunki yeh same address hai, alag-alag nahin. [32][32][32][33] padding ek column walk fix karta hai kyunki 33 mod 32 = ? ::: , to har row exactly ek bank shift karti hai.

Aage kahan jaayein: Conflict-free shared memory directly occupancy and resource limits mein feed karta hai (shared memory per block decide karta hai ki kitne warps fit hote hain), aur column-walk fix matrix transpose optimization ka dil hai. Inhe warp divergence ke saath combine karte waqt savdhan raho, jo ek alag wajah se serialize karta hai (branches, banks nahin), aur memory coalescing ke saath, jo is same "accesses ko line up karo" idea ka global-memory cousin hai. Layout rules shared memory architecture se trace back hote hain.