CUDA Academy · درس

القضاء على تفرّع Warp

أعد الفهرسة لإبقاء Warps مشغّلة.

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

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

تنفذ warps بالتزامن

يضم warp 32 خيطًا تنفذ التعليمة نفسها معًا. وعندما تتفق مساراتها، تعمل العتادة بأقصى سرعة.

تكلفة التفرع

إذا اتبعت خيوط warp فروعًا مختلفة، فهذا يسمى التفرع. تنفذ العتادة كل مسار بالتسلسل، فتظل بعض المسارات الفرعية خاملة وتضيع الدورات.

الاختزال الساذج يتفرع

يستخدم الإصدار البسيط tid % (2*s) لاختيار الخيوط النشطة. وتتداخل الخيوط النشطة والخاملة داخل كل warp، لذلك يحدث تفرع حاد في كل warp.

if (tid % (2 * s) == 0)
  data[tid] += data[tid + s];

المسارات الخاملة تكلف أيضًا

رغم أن نصف الخيوط لا يفعل شيئًا، فإنه يظل يشغل warp. ولا يستطيع warp الانتهاء حتى تتم معالجة مساري الخيوط النشطة والخاملة.

إعادة الفهرسة حسب معرّف الخيط

الحل هو إسناد العمل النشط إلى أدنى معرّفات الخيوط بدلًا من معرّفات متفرقة. احسب فهرسًا انطلاقًا من tid وstride.

int index = 2 * s * tid;
if (index < blockDim.x)
  data[index] += data[index + s];

لماذا يساعد ذلك

أصبحت الخيوط المشغولة الآن متجاورة: tid 0 و1 و2... تعمل جميعها، بينما تستريح البقية. وهكذا تكون warps بأكملها نشطة أو خاملة.

لا تكلفة لـ warps الخاملة بالكامل

ينتهي warp الذي تكون جميع مساراته الفرعية خاملةً من دون عمل. ولا يحدث تسلسل على مستوى المسارات، فتختفي تكلفة التفرع إلى حد كبير.

فخ باقي القسمة

كان الشرير الخفي هو شرط باقي القسمة. فقد بعثر الخيوط النشطة داخل كل warp، وهذا بالضبط ما يسبب التفرع.

العمل نفسه، وربط أفضل

لم تغيّر الرياضيات أو عدد عمليات الجمع. لقد أعدت فقط تعيين الخيط الذي ينفذ كل عملية جمع، وتشكرَك warps على ذلك.

يتضاعف أثره مع التوسع

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

ما زالت هناك عقبة واحدة

يقرأ هذا الإصدار الجيران المتداخلين في الذاكرة المشتركة، مما قد يسبب تعارضات البنوك. وسيعالج الدرس التالي هذه المشكلة أيضًا.

اختبار سريع

فكّر في سبب تفرع warp في الاختزال الساذج.

مراجعة

تخلصت من التفرع بإسناد العمل إلى أدنى معرّفات الخيوط، فأصبحت warps نشطة بالكامل أو خاملة بالكامل. الرياضيات نفسها، لكن الاختزال أسرع. التالي: تعارضات البنوك. 🚀

البدء مجانًا

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

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

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

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

هل درس «القضاء على تفرّع Warp» مجاني؟

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

ماذا ستتعلم في «القضاء على تفرّع Warp»؟

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

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

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

كم من الوقت يستغرق درس «القضاء على تفرّع Warp»؟

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

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

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

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

  1. فكرة شجرة الاختزال
  2. القضاء على تفرّع Warp
  3. العنونة التسلسلية
  4. الاختزال النهائي متعدد الكتل
← العودة إلى CUDA Academy