שיעור 16: Shared memory — scratchpad על-השבב
זיכרון משותף (shared memory) הוא זיכרון קטן ומהיר שיושב על השבב של ה-SM, ומשמש כ-scratchpad לכל ה-threads שבאותו block. מצהירים עליו עם המילה __shared__, למשל __shared__ float tile[256];, והוא מהיר בערך פי 100 מזיכרון גלובלי — אבל קטן (עשרות KB ל-block, לא גיגה-בייטים). הרעיון המרכזי: כשהרבה threads
זיכרון גלובלי הוא מחסן ענק ורחוק. shared memory הוא מגירה קטנה ליד שולחן העבודה של הקבוצה: מביאים מהמחסן פעם אחת, שמים במגירה, וכל מי שבקבוצה שולף משם מהר. כל קבוצה (block) מקבלת מגירה נפרדת משלה.
- זיכרון משותף (shared memory)
- זיכרון מהיר על-השבב, משותף לכל ה-threads באותו block, מוצהר עם __shared__. מהיר בהרבה מגלובלי אך קטן.
- scratchpad
- אזור עבודה זמני שבו ה-block מאחסן נתונים שנקראים שוב ושוב, כדי לא לפנות כל פעם לזיכרון הגלובלי האיטי.
- תחום block (block scope)
- התחום שבו shared memory קיים: רק עבור ה-block שיצר אותו, ורק כל עוד ה-block רץ. blocks אחרים לא רואים אותו.
- שימוש חוזר בנתונים (reuse)
- מצב שבו אותו ערך נדרש פעמים רבות. אז כדאי לטעון אותו פעם אחת ל-shared ולקרוא משם בזול.