الدرس 18: تعارضات banks في shared memory
إن shared memory سريعة، لكنها مقسّمة إلى 32 قناة متوازية تُسمّى banks. تستطيع كل الـ 32 thread داخل الـ warp القراءة معاً في خطوة واحدة — لكن فقط إذا كان كل واحد منها يستهدف bank مختلفاً. عندما يستهدف اثنان نفس الـ bank يحدث bank conflict ويجبرهما العتاد على الانتظار في الطابور. في هذا الدرس نحسب با
تخيّل 32 صندوق دفع في متجر و 32 عميلاً. إذا ذهب كل عميل إلى صندوق مختلف، يدفعون جميعاً دفعة واحدة، بسرعة. لكن إذا تزاحم عميلان على نفس الصندوق، ينتظر أحدهما الآخر. الـ padding أشبه بإزاحة الطابور قطرياً بحيث يحصل كل عميل مجدداً على صندوق لنفسه.
- bank
- إحدى وحدات الذاكرة المتوازية الـ 32 التي تشكّل shared memory. كلمة عند الفهرس i تنتمي إلى bank i % 32.
- bank conflict
- عندما تصل threads في نفس الـ warp إلى عناوين مختلفة تقع في نفس الـ bank، يسلسلها العتاد (تعارض من n اتجاه يكلّف n ضِعف الوقت).
- broadcast
- عندما تقرأ كل الـ threads في الـ warp نفس عنوان shared تماماً، تُبَثّ القيمة إلى الجميع في خطوة واحدة — دون غرامة.
- padding
- إضافة عمود وهمي، tile[N][N+1]، يُزيح كل صف بمقدار bank واحد بحيث يقع الوصول إلى العمود على 32 bank مختلفاً.