Warp
ওয়ার্প
একটা GPU Streaming Multiprocessor (SM)-এর ৩২টা thread, যারা lockstep-এ ঠিক একই instruction চালায় — GPU-র আসল SIMD execution unit, শুধু NVIDIA-র SIMT ভাষায় 'independent thread'-এর ছদ্মবেশে দেওয়া।
also: SIMT, streaming multiprocessor, SM
একটা Streaming Multiprocessor (SM) হলো GPU-র building
block — সরল কোরের cluster যারা register file, warp scheduler,
আর shared memory ভাগাভাগি করে। একটা NVIDIA A100-এ ১০৮টা SM,
প্রতিটায় ৬৪টা FP32 core — CPU-র ৪–৬৪টা জটিল, out-of-order
core-এর ঠিক বিপরীত দর্শন (কম কিন্তু জটিল বনাম বহু কিন্তু সরল)।
SM তার থ্রেডগুলোকে ৩২-জনের দলে ভাগ করে — এই দলটাই warp।
একটা warp-এর সব thread প্রতি cycle-এ ঠিক একই instruction
চালায়, [[simd]]-এর মতোই, শুধু “lane” এখানে “thread” নামে ডাকা
হয়।
SIMT (Single Instruction, Multiple Threads) হলো এই মডেলের
নাম — একটা illusion দেয় যে প্রতিটা thread স্বাধীন, তার নিজস্ব
register/PC আছে, নিজের if নিতে পারে — কিন্তু নিচে hardware
পুরোপুরি SIMD lockstep-এ চলে। SIMD প্রোগ্রামার explicit vector
নিয়ে কাজ করে; SIMT প্রোগ্রামার একটা scalar-দেখতে thread লেখে,
compiler/hardware সেটাকে warp-এ ভাগ করে।
Warp divergence: একই warp-এর thread ভিন্ন if branch নিলে,
hardware উভয় পথ সিরিয়ালি চালায়, প্রতিবার অমিল থ্রেডদের
mask out করে। Worst case (৩২টা thread, ৩২টা ভিন্ন path) — ৩২ গুণ ধীর। এটা CPU-র [[branch-prediction]]-এর সম্পূর্ণ ভিন্ন
mechanism — সেখানে ভুল অনুমানের penalty, এখানে উভয় পথ চালানোর
নিশ্চিত খরচ, prediction দিয়ে এড়ানো যায় না।
Global memory (GPU-র DRAM, ~৪০০–৮০০ cycle) বনাম shared memory (SM-এর on-chip SRAM, ~২০–৩০ cycle, [[cache-line]]-এর মতো কাছের কিন্তু programmer-managed, automatic নয়) — এই দুই স্তরের latency পার্থক্যই GPU-র “massive parallelism দিয়ে latency hide করা” কৌশলের ভিত্তি, CPU-র speculation-ভিত্তিক কৌশলের বিপরীতে।