الدرس 16: أساسيات shared memory
shared memory هي ذاكرة صغيرة وسريعة تقع على شريحة الـ SM وتعمل بمثابة scratchpad لكل الـ threads داخل الـ block نفسه. تُصرّح عنها بالكلمة المفتاحية __shared__، مثلاً __shared__ float tile[256];، وهي أسرع من global memory بنحو 100 مرة — لكنها صغيرة (عشرات الـ KB لكل block، لا غيغابايتات). الفكرة الجو
global memory مستودع ضخم وبعيد. أما shared memory فهي درج صغير بجوار طاولة الفريق: تُحضِر من المستودع مرة واحدة، وتضع الشيء في الدرج، ثم يسحب منه كل أفراد الفريق بسرعة. كل فريق (block) يحصل على درجه المنفصل الخاص به.
- الذاكرة المشتركة (shared memory)
- ذاكرة سريعة على الشريحة (on-chip) يتشاركها كل الـ threads داخل الـ block نفسه، ويُصرّح عنها بـ __shared__. أسرع بكثير من global لكنها صغيرة.
- scratchpad
- مساحة عمل مؤقتة يخزّن فيها الـ block بيانات تُقرأ مرارًا وتكرارًا، لتجنّب الذهاب إلى global memory البطيئة في كل مرة.
- نطاق الـ block (block scope)
- نطاق shared memory: فقط للـ block الذي أنشأها، وفقط طالما يعمل ذلك الـ block. الـ blocks الأخرى لا تراها.
- إعادة استخدام البيانات (data reuse)
- عندما تُطلب القيمة نفسها مرات عديدة. عندها يكون من المجدي تحميلها مرة واحدة إلى shared memory وقراءتها من هناك بتكلفة زهيدة.