CUDA Academy · درس

تجنّب تسريبات الذاكرة والتحرير المزدوج

إدارة منضبطة لأعمار التخصيصات.

الدرس 4 من 413 خطوة

تجنّب تسريبات الذاكرة والتحرير المزدوج درس مجاني في CUDA Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في CUDA Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة CUDA Academy 4 دروس في المجموع.

ذاكرة تنسون تحريرها

إذا حجزتم مخزنًا مؤقتًا باستخدام cudaMalloc ولم تحرروه أبدًا، فستظل ذاكرة GPU محتجزة. ويُسمى هذا الهدر تسرّب الذاكرة. 💧

تتراكم التسريبات بسرعة

نادراً ما يسبب مخزن واحد منسي مشكلة، لكن وجود تسرّب داخل حلقة يستنزف GPU بسرعة حتى تبدأ عمليات الحجز الجديدة بالفشل.

كل Malloc يحتاج إلى Free

الحل هو الانضباط البسيط: اكتبوا مقابل كل cudaMalloc استدعاء cudaFree المطابق قبل خروج المؤشر من النطاق.

cudaMalloc(&d_a, bytes);
// ... use it ...
cudaFree(d_a);

التحرير مرتين خطأ

يُعد استدعاء cudaFree على المؤشر نفسه مرة أخرى تحريرًا مزدوجًا. فهذا يفسد مخصص الذاكرة وغالبًا ما يتسبب في انهيار البرنامج. 💥

اجعلوا المؤشر فارغًا بعد التحرير

اضبطوا المؤشر على nullptr مباشرةً بعد cudaFree. ويكون التحرير الثاني لـnullptr عديم الأثر، مما يحمي من التحرير المزدوج.

cudaFree(d_a);
d_a = nullptr;

تحرير nullptr آمن

تعرّف CUDA ‏cudaFree(nullptr) باعتباره عملية لا تؤثر في شيء. ولهذا فإن تصفير المؤشرات بعد تحريرها عادة موثوقة للغاية.

المؤشرات المتدلية تسبب المشكلات

بعد cudaFree يصبح العنوان القديم مؤشرًا متدليًا. واستخدامه في kernel يقرأ ذاكرة لم تعد مملوكة لكم.

انتبهوا إلى عمليات الخروج المبكر

قد يؤدي خطأ يتسبب في عودة مبكرة إلى تجاوز التنظيف وتسريب الذاكرة. حرروا المخازن المؤقتة في كل مسار خروج، وليس في المسار الناجح فقط.

طابقوا أعمار الحجز

احجزوا الذاكرة في أقرب وقت ممكن، وحرروها فور الانتهاء منها. إن تقصير أعمار الموارد يقلل الفترة التي يمكن أن تختبئ فيها التسريبات.

دعوا RAII يتولى التحرير

يضيف غلاف صغير يحرر الذاكرة داخل destructor مفهوم RAII إلى ذاكرة الجهاز، بحيث يحدث التنظيف تلقائيًا عند انتهاء النطاق. 🧰

الأدوات تكتشف الباقي

عندما يتراجع الانضباط، تُبلغ compute-sanitizer عن التسريبات وعمليات التحرير غير الصحيحة. شغلوها بانتظام للحفاظ على سلامة التعامل مع الذاكرة.

تحقق سريع

لنرَ كيف نحمي أنفسنا من التحرير المزدوج.

مراجعة

لقد تعلمتم مطابقة كل cudaMalloc مع cudaFree واحد، وتصفير المؤشرات بعد ذلك، والتحرير في جميع المسارات، والاستعانة بـsanitizers لاكتشاف الأخطاء. 🎉

البدء مجانًا

تعلم C++ مع معلم ذكاء اصطناعي — مجانًا

اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.

الدورات
30
الدروس
120

الأسئلة الشائعة

هل درس «تجنّب تسريبات الذاكرة والتحرير المزدوج» مجاني؟

نعم — نص درس «تجنّب تسريبات الذاكرة والتحرير المزدوج» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة CUDA Academy، انتقل إلى CoddyKit PRO. تتضمن دورة CUDA Academy 4 دروس في المجموع.

ماذا ستتعلم في «تجنّب تسريبات الذاكرة والتحرير المزدوج»؟

إدارة منضبطة لأعمار التخصيصات. تتمرن على CUDA Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ CUDA Academy؟

لا تُشترط خبرة سابقة. CUDA Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «تجنّب تسريبات الذاكرة والتحرير المزدوج»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس CUDA Academy هذا؟

نعم. كل درس في CUDA Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. cudaMalloc وcudaFree
  2. مؤشرات إلى ذاكرة GPU
  3. تهيئة الذاكرة باستخدام cudaMemset
  4. تجنّب تسريبات الذاكرة والتحرير المزدوج
← العودة إلى CUDA Academy