الحماية من الخروج عن النطاق
فحص الحدود if (i < n).
الحماية من الخروج عن النطاق درس مجاني في CUDA Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في CUDA Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة CUDA Academy 4 دروس في المجموع.
غالبًا ما تطلق عددًا أكبر من اللازم
تأتي أعداد الخيوط بأحجام كتل ثابتة، لذلك تطلق دائمًا تقريبًا بعض الخيوط الإضافية التي تتجاوز طول المصفوفة. ويجب التعامل مع هذه الخيوط الفائضة.
ما الذي يحدث خطأً؟
يحسب الخيط الإضافي فهرسًا يتجاوز نهاية المصفوفة. وإذا كتب هناك، فسيتعامل مع ذاكرة لا يملكها، مما يسبب خطأ تجاوز الحدود الصامت.
لن تحذّرك وحدة معالجة الرسوميات
بخلاف التعطل الواضح، قد تؤدي الكتابة خارج النطاق إلى إفساد بيانات مجاورة أو قراءة بيانات عشوائية. وتستمر النواة في العمل، لذلك يظل الفشل غير مرئي إلى أن تبدو النتائج خاطئة.
الإصلاح في سطر واحد
قبل أن يستخدم أي خيط فهرسه، تحقق من وقوعه داخل المصفوفة. يُعد فحص الحدود الصغير هذا أهم عادة أمان في CUDA.
if (i < n) {
out[i] = a[i] + b[i];
}لماذا نستخدم أصغر من لا أصغر من أو يساوي؟
تتراوح الفهارس الصحيحة من 0 إلى n ناقص 1. ويسمح الشرط الصارم i < n بمرور العنصر الحقيقي الأخير، ويوقف أول عنصر غير صالح.
الخيوط الخاملة تخرج فقط
يتخطى الخيط الذي يقع فهرسه خارج النطاق العمل ويعود ببساطة. إن فعل لا شيء آمن تمامًا ولا يستغرق وقتًا يُذكر.
مرّر n إلى النواة
لا تستطيع النواة تخمين طول المصفوفة، لذا تمرر إليها n بوصفها معلمة. وعندها يعرف الشرط دائمًا موضع نهاية البيانات.
__global__ void add(float* a, float* b, float* out, int n) {
int i = blockIdx.x * blockDim.x + threadIdx.x;
if (i < n) out[i] = a[i] + b[i];
}احمِ عمليات القراءة أيضًا
الأمر لا يقتصر على الكتابة. فقراءة a[i] بعد نهاية المصفوفة تحمّل بيانات عشوائية أو تسبب خطأ، لذا يحمي فحص i < n نفسه كل عمليات الوصول.
خطأ شائع بمقدار واحد
تسمح كتابة i <= n عن طريق الخطأ لخيط واحد بالوصول إلى العنصر n، وهو عنصر غير موجود. احرص دائمًا على إبقاء المقارنة صارمة.
ضمان غير مكلف
يكاد الفرع لا يكلف شيئًا، لأن الخيوط الإضافية نادرة وتخرج بسرعة. وتستحق السلامة التي يوفرها تكلفة ذلك الصغيرة بكثير. ✅
اجعله رد فعل تلقائيًا
تعامل مع فحص الحدود بوصفه جزءًا من صيغة الفهرس نفسها. احسب i، ثم احمه فورًا قبل فعل أي شيء آخر.
اختبار سريع
اختر شرط الحماية الصحيح.
مراجعة
تعلمت إضافة if (i < n) بعد حساب الفهرس. يوقف هذا السطر الواحد عمليات القراءة والكتابة خارج النطاق التي لن تحذّرك وحدة معالجة الرسوميات منها أبدًا. 🛡️
الأسئلة الشائعة
هل درس «الحماية من الخروج عن النطاق» مجاني؟
نعم — نص درس «الحماية من الخروج عن النطاق» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة CUDA Academy، انتقل إلى CoddyKit PRO. تتضمن دورة CUDA Academy 4 دروس في المجموع.
ماذا ستتعلم في «الحماية من الخروج عن النطاق»؟
فحص الحدود if (i < n). تتمرن على CUDA Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ CUDA Academy؟
لا تُشترط خبرة سابقة. CUDA Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «الحماية من الخروج عن النطاق»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس CUDA Academy هذا؟
نعم. كل درس في CUDA Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- صيغة الفهرس الكلاسيكية
- الحماية من الخروج عن النطاق
- التقريب إلى أعلى لعدد الكتل
- حلقات Grid-Stride