Foundationপ্রথম নীতি থেকে
LEVEL 11 · Advanced Architecture & Performance

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-ভিত্তিক কৌশলের বিপরীতে।