6.2.15 · D1 · HinglishGPU Architecture

FoundationsROCm - OpenCL alternatives

1,931 words9 min read↑ Read in English

6.2.15 · D1 · Hardware › GPU Architecture › ROCm - OpenCL alternatives

Parent note ROCm / OpenCL alternatives padhne se pehle, tumhe usmein aane wala har word aur symbol bilkul zero se samajhna hoga. Yahi is page ka kaam hai. Hum shuru karte hain "GPU aakhir kar kya raha hai" se aur khatam karte hain exact formula global_id = group_id × local_size + local_id par.


1. GPU asal mein kya karta hai (picture ke saath)

Figure — ROCm - OpenCL alternatives

Figure dekho. Left side mein ek bada square = ek CPU core, ek to-do list par ek step at a time kaam karta hua. Right side mein chhote squares ka grid = GPU cores, har square ek hi waqt "apne do numbers add karo" kar raha hai. Yeh picture hi wajah hai ki baaki sab kuch exist karta hai: us grid ko control karne ke liye humein ek language chahiye.

Is topic ko yeh word kyun chahiye? Kyunki ROCm, OpenCL aur CUDA sab bas alag-alag spelling hain "yeh mera kernel hai, please ise million workers par chalao" ke liye.


2. Host aur Device — do alag computers

Figure — ROCm - OpenCL alternatives

Figure mein ek patli pipe se jude do boxes hain. Host box mein tumhara data h_A mein hai (h = host). Device box mein uski copy d_A mein hai (d = device). Pipe unke beech ki slow cable hai — yahi wajah hai ki parent note baar baar cudaMemcpy / hipMemcpy / clEnqueueWriteBuffer call karta hai: GPU ke kuch karne se pehle data ko us pipe se physically ship karna padta hai, aur baad mein jawab wapas ship karna padta hai.


3. Million workers ko naam dena — IDs

Agar har worker ek hi kernel chalata hai, toh worker #504 ko kaise pata chalega ki woh 504th pair add kare aur 1st nahin? Har worker ko ek unique number diya jaata hai.

(0) aur .x dono ka matlab "x-direction" hai. Grid 1-D, 2-D ya 3-D ho sakta hai (jaise workers ki ek line, sheet, ya cube), isliye hum har direction ko alag index karte hain.


4. Workers ko group karna — Work-Groups aur NDRange

Ek million workers ki flat list kyun nahin? Kyunki hardware physically unhe fixed-size bundles mein chalata hai: NVIDIA mein warps of 32, AMD mein wavefronts of 64. Machine se match karne ke liye, hum grid ko equal work-groups mein kaatte hain.

Figure — ROCm - OpenCL alternatives

Figure parent note ke "Work-Item Execution Model" formula ki poori kahani hai. Left se right padho:

  • Poori amber strip = NDRange (jise Global Work Size bhi kehte hain), total workers .
  • Yeh equal size ke cyan blocks mein kata hua hai = work-groups, har ek mein workers hain (Local Work Size).
  • Ek highlighted worker dikhata hai ki uske teen IDs kaise related hain.

Yeh last formula kyun? Yeh plain chunk-numbering hai. Agar groups mein workers hain, toh worker global number . Figure mein highlighted worker dekho: woh group 1 mein hai, local position 2 par, toh uska global number hai .


5. Data kahan rehta hai — memory hierarchy

Ek worker har byte tak equally fast nahin pahunch sakta. Topic ke __global / __local / __private keywords batate hain ki memory kitni door hai.

Yahi wajah hai ki parent note baar baar batata hai ki AMD mein 64 KB LDS per compute unit hai jabki NVIDIA mein 48–128 KB shared memory per SM hai: abstraction (__local) ek hi word hai, lekin uske peeche ka size vendor se vendor alag hai — aur tumhare portable code ko koi ek number assume nahin karna chahiye.


6. Translation layers exist kyun hain — IR aur JIT

Har vendor ka GPU apni private machine language mein baat karta hai (NVIDIA: PTX, AMD: GCN/RDNA ISA). Tum apna kernel har ek ke liye dobara nahin likhna chahte.

Parent jo pipeline dikhata hai — — bilkul yahi hai: shared vocabulary mein ek baar likho, IR + JIT ko jo bhi hardware tumhare paas hai uske liye fit karne do. Woh ek sentence hi poori wajah hai ki ROCm aur OpenCL vendor lock-in se bahar nikal sakte hain.


7. Yeh pieces topic ko kaise feed karte hain

Kernel = one tiny program per worker

Work-item = one running worker

Work-group = bundle matching hardware warp or wavefront

NDRange = full grid of all workers

Host = CPU gives orders

Device = GPU does mass work

Memory spaces global local private

ID formula global_id = group_id x local_size + local_id

IR plus JIT hides vendor machine language

ROCm and OpenCL alternatives


Equipment checklist

Right side cover karo aur parent note par jaane se pehle har ek ka jawab do.

Kernel kya hai, ek line mein?
Woh chhota program jo EK GPU worker chalata hai; hardware ise sabhi workers par copy kar deta hai.
Host aur device mein kya fark hai?
Host = CPU + uski RAM jo orders deti hai; device = GPU + uski apni alag memory jo mass work karti hai.
h_A aur d_A alag cheezein kyun hain?
Yeh do alag memories mein do arrays hain; computing se pehle/baad mein unke beech memcpy karna zaroori hai.
Work-item kya hai?
Kernel ki ek running copy — ek worker. (CUDA/HIP ise "thread" kehte hain.)
Workers ko work-groups mein kyun group karte hain?
Hardware physically threads ko fixed bundles mein chalata hai (NVIDIA warp = 32, AMD wavefront = 64); groups logical work ko un bundles par map karte hain.
Global-id formula batao aur explain karo.
global_id = group_id × local_size + local_id; yeh plain chunk-numbering hai — group offset plus group ke andar position.
1,048,576 elements ke liye local size 64 ke saath kitne work-groups honge?
1,048,576 ÷ 64 = 16,384.
Teen memory spaces fastest se slowest order mein batao.
__private (registers) → __local (group scratchpad) → __global (VRAM).
IR (jaise LLVM IR) kya faayda deta hai?
Ek neutral middle language jo kisi bhi vendor ka back-end finish compile kar sake, taaki ek source kaafi GPUs ko target kar sake.
JIT compilation driver ko kya karne deta hai?
Run time par exact GPU ke liye final machine code compile karna, uske liye optimize karte hue.
Kernel mein aksar if (i < n) kyun hota hai?
Last work-group idle workers se padded ho sakta hai; guard unhe array ke baad memory read karne se rokta hai.