الدرس 9: الشبكات والكتل ثنائية الأبعاد
المصفوفات والصور ثنائية الأبعاد بطبيعتها، لذا تتيح لك CUDA تنظيم الـ threads في شبكة ثنائية الأبعاد. فبدلاً من بُعد x وحيد، لدينا threadIdx.x و threadIdx.y، و blockIdx.x و blockIdx.y، بالإضافة إلى blockDim.x و blockDim.y. يحسب كل thread صفاً وعموداً: row = blockIdx.y * blockDim.y + threadIdx.y، col
مسرح فيه صفوف ومقاعد. لإيجاد مقعد عبر رقم تسلسلي واحد، تعدّ: كل صف مكتمل يُسهم بـ width مقعداً، فيكون المقعد هو الصف مضروباً في width زائد رقم العمود. كل مرشد قاعة (thread) يعرف تماماً صفه وعموده.
- شبكة ثنائية الأبعاد
- تنظيم الـ threads في بُعدين (x و y)، وهو ملائم للمصفوفات والصور حيث لكل عنصر صف وعمود.
- row و col
- يأتي row من بُعد y (blockIdx.y، threadIdx.y) و col من بُعد x. معاً يشكّلان الإحداثي ثنائي الأبعاد للـ thread.
- تسطيح row-major
- تحويل (row, col) إلى فهرس مسطّح: idx = row * width + col، لأن الذاكرة تُخزَّن صفاً بعد صف.
- dim3
- نوع من ثلاثة مكوّنات (x، y، z) يصف حجم block أو grid، على سبيل المثال dim3 block(16, 16).