الدرس 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).