שיעור 32: Streams ומקביליות — חפיפת copy ו-compute
stream ב-CUDA הוא תור של פעולות שמתבצעות לפי הסדר שבו נשלחו אליו. הכלל המרכזי: פעולות באותו stream מסתדרות בטור (סדרתי), אבל פעולות ב-streams שונים יכולות לחפוף בזמן. זה מה שמאפשר את ההאצה הגדולה: בזמן שה-GPU מחשב kernel על נתח אחד של הנתונים (stream A), מנוע ה-DMA מעתיק את הנתח הבא מה-host אל ה-dev
stream הוא כמו קופה בסופר: הלקוחות בקופה אחת מחכים בתור זה אחרי זה. תפתח שתי קופות (שני streams) ושני לקוחות יטופלו בו-זמנית. אם כולם נדחקים לקופה אחת — אין מקביליות.
- stream
- תור של פעולות GPU שמתבצעות לפי סדר השליחה. פעולות באותו stream סדרתיות; ב-streams שונים יכולות לחפוף.
- stream ברירת-מחדל (stream 0)
- ה-stream שאליו נשלחות פעולות כשלא מציינים stream. לרוב מסנכרן ומונע חפיפה אם הכול עובר דרכו.
- cudaMemcpyAsync
- העתקת זיכרון לא-חוסמת שמקבלת stream. מאפשרת לחפוף העתקה עם חישוב כשמשתמשים בזיכרון pinned.
- חפיפה (overlap)
- ביצוע בו-זמני של פעולות שונות — למשל copy ב-stream אחד בזמן compute ב-stream אחר — כדי לקצר זמן כולל.