שיעור 13: היררכיית הזיכרון: registers, shared, global, constant
ל-GPU יש כמה סוגי זיכרון שנבדלים זה מזה במהירות, בהיקף (scope) ובאורך החיים. registers הם הזיכרון המהיר ביותר: כל משתנה מקומי פשוט ב-kernel יושב ברגיסטר, פרטי ל-thread בודד וקיים רק כל עוד ה-thread רץ. shared memory, שמוכרז עם __shared__, יושב על-השבב (on-chip) ומשותף לכל ה-threads באותו block — הוא
תחשוב על מטבח: registers הם הידיים שלך — הכי מהיר, אבל רק שלך ורק לרגע. shared memory הוא שיש העבודה המשותף של צוות אחד במטבח — מהיר ונגיש לכל הצוות, אבל לא לצוות במטבח אחר. global memory הוא המקרר הענק במחסן — גדול ומשרת את כולם, אבל ההליכה אליו איטית. constant memory הוא לוח המתכון התלוי על הקיר שכולם קוראים אבל אף אחד לא משנה.
- registers
- הזיכרון המהיר ביותר, פרטי ל-thread בודד. כל משתנה מקומי פשוט ב-kernel יושב כאן וחי רק כל עוד ה-thread רץ.
- shared memory
- זיכרון על-השבב המוכרז __shared__, משותף לכל ה-threads באותו block. מהיר בהרבה מ-global, אבל לא חוצה blocks.
- global memory
- ה-DRAM של ה-device: גדול, איטי, נגיש לכל ה-grid וקיים בין הפעלות. לשם מעתיקים נתונים מה-host.
- constant memory
- זיכרון read-only המוכרז __constant__ ונשמר במטמון. מצוין כשכל ה-threads קוראים את אותו ערך.