الدرس 7: ذاكرة host/device: cudaMalloc, cudaMemcpy
يمتلك كل من الـ CPU (host) والـ GPU (device) ذاكرات منفصلة. المؤشر الناتج من malloc يقع في ذاكرة الـ host، والمؤشر الناتج من cudaMalloc يقع في ذاكرة الـ device — ولا يجوز الوصول إلى ذاكرة الـ device مباشرةً من كود الـ host. لذلك فإن سير العمل الكامل لأي حساب على الـ GPU يتكون دائمًا من نفس الخطوات ا
الـ 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.