الدرس 5: الفهرسة: threadIdx, blockIdx, blockDim
عند تشغيل kernel على grid من الكتل، يجب أن يعرف كل thread عن أي عنصر في المصفوفة هو مسؤول. تمنح CUDA كل thread ثلاثة متغيرات مدمجة: threadIdx.x — فهرس الـ thread داخل كتلته؛ blockIdx.x — فهرس الكتلة داخل الـ grid؛ وblockDim.x — عدد الـ threads في كل كتلة. للحصول على فهرس عالمي واحد يحدّد الـ thread
تخيّل موقف سيارات به صفوف من الأماكن. blockIdx.x هو رقم الصف، وblockDim.x هو كم مكانًا في كل صف، وthreadIdx.x هو مكانك داخل الصف. لتعرف رقم مكانك الإجمالي من بداية الموقف: الصف مضروبًا في عدد الأماكن لكل صف، زائد مكانك في الصف.
- threadIdx.x
- فهرس الـ thread داخل كتلته. يمتد من 0 إلى blockDim.x-1، ويُعاد ضبطه في كل كتلة.
- blockIdx.x
- فهرس الكتلة داخل الـ grid. يمتد من 0 إلى gridDim.x-1.
- blockDim.x
- عدد الـ threads في كل كتلة (البُعد المحدد عند التشغيل). نفسه لكل كتلة في الـ grid.
- الفهرس العالمي
- معرّف فريد لـ thread عبر الـ grid بأكمله: i = blockIdx.x * blockDim.x + threadIdx.x.