رموز الإرجاع مقابل الأخطاء غير المتزامنة
لماذا تفشل النوى بصمت افتراضيًا.
رموز الإرجاع مقابل الأخطاء غير المتزامنة درس مجاني في CUDA Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في CUDA Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة CUDA Academy 4 دروس في المجموع.
طريقتان لفشل CUDA
تُبلغ CUDA عن المشكلات بطريقتين: رمز إرجاع فوري من استدعاءات API، وأخطاء غير متزامنة مؤجلة من kernels. ومعرفة كلتيهما أساسية. 🧭
تعيد استدعاءات API رمزًا
تعيد معظم استدعاءات CUDA runtime قيمة من النوع cudaError_t. وتعني قيمة cudaSuccess أن كل شيء سليم، بينما تشير أي قيمة أخرى إلى مشكلة يمكنك التعامل معها.
cudaError_t err = cudaMalloc(&d, n);تحقّق منه فورًا
بالنسبة إلى الاستدعاءات المتزامنة مثل cudaMalloc، يكون رمز الإرجاع نهائيًا. قارنه بـ cudaSuccess فورًا وتصرف قبل المتابعة.
if (err != cudaSuccess) return 1;لا تعيد kernels شيئًا
لا يملك إطلاق kernel باستخدام الأقواس الثلاثية قيمة إرجاع يمكنك اختبارها. لذلك لا يمكن الإبلاغ عن أخطاء الإطلاق بالطريقة السهلة نفسها.
myKernel<<<g, b>>>(d); // no code to checkلماذا تكون kernels غير متزامنة
عمليات الإطلاق غير متزامنة: تضع CPU العمل في قائمة الانتظار وتتابع التنفيذ بسرعة. وقد لا تكون GPU قد بدأت حتى عند تنفيذ السطر التالي.
تصل الأخطاء متأخرة
بما أن العمل يُنفّذ لاحقًا، يتحول تعطل kernel إلى خطأ غير متزامن. ويظهر في استدعاء لاحق، لا في سطر الإطلاق نفسه.
صامتة افتراضيًا
إذا لم تتحقق من الأخطاء قط، تفشل kernel المعطوبة بصمت. ويبدو أن برنامجك يعمل بينما ينتج قيمًا تالفة أو أصفارًا في المخرجات.
نوعان من أخطاء الإطلاق
قد يفشل الإطلاق في مرحلتين: تهيئة غير صحيحة تُكتشف عند الإطلاق، وخطأ أثناء التشغيل مثل تجاوز الحدود يُكتشف أثناء التنفيذ.
أخطاء ثابتة
يترك الخطأ الخطير السياق في حالة خطأ ثابتة. بعد ذلك يعيد كل استدعاء CUDA لاحق الخطأ نفسه حتى تعيد التشغيل.
أجرِ المزامنة لإجبار ظهور الأخطاء غير المتزامنة
لإظهار خطأ مخفي، استدعِ cudaDeviceSynchronize. فهي تنتظر kernel وتعيد أي خطأ أثناء التشغيل واجهته.
cudaError_t e = cudaDeviceSynchronize();عادة موثوقة
القاعدة العامة: تحقّق من رمز الإرجاع لكل استدعاء API، وأجرِ المزامنة لاكتشاف أخطاء kernels. معًا، لا يتركان أي فشل دون اكتشاف.
تحقّق سريعًا
اختبر مدى فهمك لكيفية إبلاغ kernels عن الفشل.
مراجعة: مسارا الأخطاء
تعطي استدعاءات API رمز إرجاع فوريًا، بينما تفشل kernels بطريقة غير متزامنة. تحقّق من الرموز وأجرِ المزامنة حتى لا يفوتك شيء دون ملاحظة. 🎉
الأسئلة الشائعة
هل درس «رموز الإرجاع مقابل الأخطاء غير المتزامنة» مجاني؟
نعم — نص درس «رموز الإرجاع مقابل الأخطاء غير المتزامنة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة CUDA Academy، انتقل إلى CoddyKit PRO. تتضمن دورة CUDA Academy 4 دروس في المجموع.
ماذا ستتعلم في «رموز الإرجاع مقابل الأخطاء غير المتزامنة»؟
لماذا تفشل النوى بصمت افتراضيًا. تتمرن على CUDA Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ CUDA Academy؟
لا تُشترط خبرة سابقة. CUDA Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «رموز الإرجاع مقابل الأخطاء غير المتزامنة»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس CUDA Academy هذا؟
نعم. كل درس في CUDA Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- رموز الإرجاع مقابل الأخطاء غير المتزامنة
- استخدام cudaGetLastError بعد التشغيل
- وحدة ماكرو CUDA_CHECK قابلة لإعادة الاستخدام
- فك ترميز cudaGetErrorString