الدرس 34: الذاكرة الموحّدة (Unified Memory) مع cudaMallocManaged
حتى الآن كنّا ندير نسختين منفصلتين لكل مصفوفة: مؤشّر host (لنقل a) ومؤشّر device (لنقل d_a)، وننقل البيانات بينهما بواسطة cudaMemcpy يدوي في كل اتجاه. تُزيل الذاكرة الموحّدة (Unified Memory) هذا التكرار: يُخصّص cudaMallocManaged مؤشّرًا واحدًا صالحًا على host وعلى device معًا، ويُهاجر الـ driver صفح
بدلًا من دفترين منفصلين — واحد على مكتبك (host) وواحد على مكتب صديقك (device) — تظلّ تنسخ بينهما يدويًا، هناك دفتر سحري واحد. عندما تحتاجه يظهر عندك؛ وعندما يحتاجه صديقك ينزلق إليه من تلقاء نفسه. مريح جدًا، لكن الانزلاق نفسه يستغرق لحظة.
- الذاكرة الموحّدة (Unified Memory)
- مساحة عناوين واحدة يمكن الوصول إليها من host ومن device عبر مؤشّر واحد. يُهاجر الـ driver الصفحات عند الطلب.
- cudaMallocManaged
- يُخصّص ذاكرة مُدارة ويُعيد مؤشّرًا واحدًا قابلًا للاستخدام على host و device دون cudaMemcpy صريح.
- هجرة الصفحات (page migration)
- عندما يصل أحد الجانبين إلى صفحة موجودة لدى الآخر، ينقل الـ driver الصفحة إليه. يؤدّي هذا إلى page fault ويكلّف وقتًا.
- cudaMemPrefetchAsync
- تلميح يُهاجر الصفحات المُدارة مسبقًا إلى وجهة معيّنة (device أو host) لتجنّب page faults أثناء الـ kernel.