שיעור 33: העברות אסינכרוניות וזיכרון pinned
כדי שהעתקה תוכל לחפוף חישוב, לא מספיק להשתמש ב-cudaMemcpyAsync ובמספר streams — צריך גם שהזיכרון בצד ה-host יהיה pinned (נעוץ). זיכרון רגיל שמקצים עם malloc הוא pageable: מערכת ההפעלה רשאית להזיז אותו בזיכרון הפיזי, ולכן ה-GPU אינו יכול להעתיק ממנו ישירות באמצעות ה-DMA. מנהל-ההתקן נאלץ קודם להעתיק א
זיכרון pageable הוא ספר בספרייה שאפשר להזיז ממדף למדף בכל רגע — שליח לא יכול לקחת אותו ישר. זיכרון pinned הוא ספר ששמים בדוכן קבוע ליד הדלת, והשליח חוטף אותו בלי לחכות.
- זיכרון pinned (page-locked)
- זיכרון host שננעץ במקומו הפיזי. ה-DMA קורא ממנו ישירות, ולכן הוא מאפשר העברה אסינכרונית אמיתית.
- זיכרון pageable
- זיכרון host רגיל (malloc) שמערכת ההפעלה יכולה להזיז. העתקה ממנו עוברת דרך אזור pinned זמני וחוסמת.
- cudaMallocHost
- מקצה זיכרון host מסוג pinned. משחררים עם cudaFreeHost. אפשרות חלופית: cudaHostAlloc.
- DMA
- מנוע העתקה ייעודי שמעביר נתונים host↔device בלי להעסיק את ה-SMs. דורש כתובת host יציבה (pinned).