وحدة ماكرو CUDA_CHECK قابلة لإعادة الاستخدام
غلّف كل استدعاء لمزيد من الأمان.
وحدة ماكرو CUDA_CHECK قابلة لإعادة الاستخدام درس مجاني في CUDA Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في CUDA Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة CUDA Academy 4 دروس في المجموع.
التحقق من كل استدعاء أمر ممل
تؤدي كتابة عبارة if بعد كل استدعاء CUDA إلى فوضى سريعة في الشيفرة. ويعالج macro CUDA_CHECK ذلك في سطر واحد نظيف. 🧹
هدف الـ macro
تريد تغليف أي استدعاء، والحصول على رمز إرجاعه، والتوقف بوضوح إذا فشل. ويمكن لـ macro واحد تنفيذ ذلك في كل مكان.
CUDA_CHECK(cudaMalloc(&d, n));التقاط النتيجة
يخزّن الـ macro داخله نتيجة الاستدعاء في متغير محلي من النوع cudaError_t حتى يمكن فحصها مرة واحدة دون استدعائها مرتين.
cudaError_t e = (call);المقارنة مع النجاح
ثم يختبر الرمز مقابل cudaSuccess. إذا تطابقا، لا يحدث شيء ويتابع البرنامج عمله بصورة طبيعية.
if (e != cudaSuccess) { /* report */ }طباعة موضع الفشل
عند الفشل، يطبع رسالة مقروءة باستخدام __FILE__ و __LINE__، فتنتقل مباشرةً إلى السطر المسبب للمشكلة.
printf("CUDA error %s at %s:%d\n", msg, __FILE__, __LINE__);حيلة do-while(0)
يُغلّف الجسم داخل do-while(0). ويجعل ذلك الـ macro عبارة واحدة تعمل بأمان حتى داخل if بلا أقواس.
#define CUDA_CHECK(c) do { /* ... */ } while(0)مخطط macro كامل
عند جمع الأجزاء، تحصل على شبكة أمان صغيرة قابلة لإعادة الاستخدام، ويمكنك لصقها في ترويسة أي مشروع CUDA.
#define CUDA_CHECK(c) do { cudaError_t e=(c); if(e) exit(1); } while(0)تغليف استدعاءات API
استخدمه مع أي استدعاء يعيد رمزًا: cudaMalloc و cudaMemcpy و cudaFree. فغلاف واحد يحميها جميعًا بطريقة موحّدة.
CUDA_CHECK(cudaMemcpy(d, h, n, cudaMemcpyHostToDevice));احمِ الإطلاق أيضًا
لا تعيد kernels شيئًا، لذا غلّف cudaGetLastError ومزامنةً بعد الإطلاق بدلًا من تغليف سطر الإطلاق نفسه.
kernel<<<g, b>>>();
CUDA_CHECK(cudaGetLastError());أبقِه في ترويسة
ضع الـ macro في ترويسة مشتركة حتى يستخدم كل ملف الفحص نفسه. ويوفر الاتساق هنا ساعات من تصحيح الأخطاء المربك.
افشل بسرعة ووضوح
المكسب الأكبر هو الفشل السريع: فعند تعطل استدعاء، تحصل فورًا على الملف والسطر والرسالة بدقة بدلًا من بيانات تالفة صامتة.
تحقّق سريعًا
اختبر مدى فهمك لـ macro CUDA_CHECK.
مراجعة: macro واحد لحمايتها كلها
يلتقط macro CUDA_CHECK الرمز، ويقارنه بالنجاح، ويطبع الملف والسطر عند الفشل. عرّفه مرة واحدة واستخدمه في كل مكان. 🎉
تعلم C++ مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 30
- الدروس
- 120
الأسئلة الشائعة
هل درس «وحدة ماكرو CUDA_CHECK قابلة لإعادة الاستخدام» مجاني؟
نعم — نص درس «وحدة ماكرو CUDA_CHECK قابلة لإعادة الاستخدام» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة CUDA Academy، انتقل إلى CoddyKit PRO. تتضمن دورة CUDA Academy 4 دروس في المجموع.
ماذا ستتعلم في «وحدة ماكرو CUDA_CHECK قابلة لإعادة الاستخدام»؟
غلّف كل استدعاء لمزيد من الأمان. تتمرن على CUDA Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ CUDA Academy؟
لا تُشترط خبرة سابقة. CUDA Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «وحدة ماكرو CUDA_CHECK قابلة لإعادة الاستخدام»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس CUDA Academy هذا؟
نعم. كل درس في CUDA Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- رموز الإرجاع مقابل الأخطاء غير المتزامنة
- استخدام cudaGetLastError بعد التشغيل
- وحدة ماكرو CUDA_CHECK قابلة لإعادة الاستخدام
- فك ترميز cudaGetErrorString