الدرس 14: تجميع الوصول إلى الذاكرة العامة (Coalescing) — المفهوم
الذاكرة العامة (device DRAM) هي أكبر ذاكرة في الـ GPU لكنها أيضًا الأبطأ، والـ hardware يقرأها في صفقات (transactions) من كتلة عناوين متجاورة — عادةً 128 بايت في كل مرة. عندما تصل كل الـ 32 thread في الـ warp إلى عناوين متتالية، مثلًا a[i] حيث i = الفهرس العام، فإن صفقة واحدة تخدمها جميعًا: هذا وصول
تخيّل رشّاش ماء يسقي 32 شتلة. إذا كانت الشتلات في صف واحد متلاصق، فإن سكبة واحدة تبلّلها جميعًا. أما إذا كانت كل شتلة تبعد 32 خطوة عن التالية، فستحتاج إلى 32 رحلة منفصلة إلى الرشّاش من أجل نفس الـ 32 شتلة — نفس كمية الماء، لكن 32 ضعف العمل.
- التجميع (coalescing)
- عندما تصل threads متتالية في الـ warp إلى عناوين متتالية، فيخدمها الـ hardware جميعًا في صفقة ذاكرة واحدة.
- صفقة الذاكرة (memory transaction)
- كتلة عناوين متجاورة (عادةً 128 بايت) يقرأها الـ hardware أو يكتبها في عملية واحدة مقابل الذاكرة العامة.
- الخطوة (stride)
- المسافة بين عناوين اثنين من الـ threads المتجاورين. الخطوة (stride) بقيمة 1 متجاورة (مجمّعة)؛ والخطوة الكبيرة تشتّت الوصول.
- عرض النطاق (bandwidth)
- كمية البايتات المفيدة المنقولة من أو إلى الذاكرة في وحدة الزمن. الوصول المشتّت يهدرها لأن كل صفقة تجلب بايتات غير لازمة.