الدرس 6: ذاكرتان منفصلتان — host وdevice وcudaMalloc
حتى الآن كتبت kernel، وحدّدت حجم grid، وأعطيت لكل thread فهرسه الخاص. لكن هناك تفصيل واحد لم نتطرق إليه بعد: أين تقيم البيانات فعليًا؟ يمتلك CPU (وهو host) وGPU (وهو device) ذاكرتين فيزيائيتين منفصلتين تمامًا. المؤشر الناتج من malloc يقيم في ذاكرة host، والمؤشر الناتج من cudaMalloc يقيم في ذاكرة dev
host وdevice مثل مكتبين في مدينتين مختلفتين. لكل مكتب خزائن حفظ ملفات خاصة به، ولا يمكنك الوصول إلى خزانة المكتب الآخر من بعيد عبر النافذة. cudaMalloc هو استئجار خزانة فارغة في المكتب الآخر (وهو GPU)، وcudaFree هو إفراغها في النهاية. في الدرس التالي سنتعلم كيف نرسل المستندات بالبريد بين المكتبين.
- ذاكرة host
- ذاكرة CPU. المؤشر الناتج من malloc يقيم هنا، ويمكن لكود host الوصول إليه مباشرةً.
- مؤشر device
- مؤشر يُرجعه cudaMalloc ويشير إلى ذاكرة GPU. يجب ألا يُقرأ مباشرةً في كود host.
- cudaMalloc
- يخصص ذاكرة على device ويُرجع مؤشر device عبر وسيطه. مثل malloc، لكن الذاكرة تقيم على GPU.
- cudaFree
- يحرر ذاكرة device التي خصصها cudaMalloc. هو نظير free بالنسبة لذاكرة host.