שיעור 7: זיכרון host↔device: cudaMalloc, cudaMemcpy
ל-CPU (host) ול-GPU (device) יש זיכרונות נפרדים. מצביע שמתקבל מ-malloc חי בזיכרון ה-host, ומצביע שמתקבל מ-cudaMalloc חי בזיכרון ה-device — ואסור לגשת לזיכרון device ישירות מקוד ה-host. לכן זרימת העבודה המלאה של חישוב על ה-GPU היא תמיד אותם חמישה שלבים: (1) cudaMalloc כדי להקצות חוצצים d_a, d_b, d_c
ה-host וה-device הם כמו שני משרדים בערים שונות. אי אפשר לקרוא מסמך שנמצא במשרד השני דרך החלון — צריך לשלוח אותו בדואר (cudaMemcpy) לשם, לתת להם לעבוד עליו, ולשלוח את התוצאה בדואר חזרה. cudaMalloc זה לשכור שולחן ריק במשרד השני, ו-cudaFree זה לפנות אותו בסוף.
- cudaMalloc
- מקצה זיכרון על ה-device ומחזיר מצביע device. כמו malloc, אבל הזיכרון חי על ה-GPU.
- cudaMemcpy
- מעתיק בתים בין host ל-device. הכיוון נקבע ב-cudaMemcpyHostToDevice או cudaMemcpyDeviceToHost.
- H2D ו-D2H
- Host-to-Device מעלה קלט אל ה-GPU; Device-to-Host מחזיר תוצאות אל ה-CPU. שני כיוונים מנוגדים.
- cudaFree
- משחרר זיכרון device שהוקצה ב-cudaMalloc. מקביל ל-free עבור זיכרון ה-host.