0Pricing
CUDA Academy · درس

دوال Ballot وVote

استطلع الشروط المنطقية عبر Warp.

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

يمكن للمسارات التصويت

إلى جانب نقل البيانات، يمكن لـ warp الإجابة عن أسئلة بنعم أو لا معًا. تتيح دوال Vote المضمنة لكل مسار مشاركة شرط منطقي صحيح أو خاطئ في خطوة واحدة منخفضة التكلفة.

تعرّفوا على ballot_sync

أكثر عمليات التصويت مرونة هي ballot_sync. فهي تُرجع عددًا من 32 بت، حيث تكون البتة i مساوية لـ 1 بالضبط عندما يكون الشرط المنطقي للمسار i صحيحًا.

unsigned bits = __ballot_sync(mask, pred);

بت واحدة لكل مسار

ذلك العدد الصحيح المُعاد هو bitmap صغير لـ warp. وتُخبركم قراءة البتة i بما إذا كان المسار i قد صوّت بصحيح، إذ تكون جميع النتائج مجمّعة في سجل واحد.

عدّ القيم الصحيحة

هل تريدون معرفة عدد المسارات التي أجابت بنعم؟ احسبوا عدد البتات المضبوطة في نتيجة الاقتراع. تحسب popc البتات المضبوطة، فتُعطيكم عدد الأصوات الصحيحة في warp فورًا.

int yes = __popc(__ballot_sync(mask, pred));

الكل أو أيّ

تجيب اختصاراتان عن الأسئلة الشائعة. تُرجع all_sync قيمة صحيحة فقط إذا وافقت جميع المسارات، بينما تُرجع any_sync قيمة صحيحة إذا وافق مسار واحد على الأقل.

bool every = __all_sync(mask, pred);

أيّ يعني واحدًا على الأقل

استخدموا any_sync للخروج المبكر: فإذا وجد أيّ مسار تطابقًا، يمكن لـ warp بأكمله الاستجابة معًا من دون فحص المسارات واحدًا تلو الآخر.

bool found = __any_sync(mask, pred);

ضغط التدفق

يتيح الاقتراع تنفيذ compaction: يقرر كل مسار ما إذا كان سيُبقي عنصره، ثم يصوّت، وتُخبر خريطة البتات المسارات بمواقع الكتابة في مصفوفة إخراج مضغوطة.

العثور على موقعي

لوضع قيمته، يعدّ المسار البتات الصحيحة الواقعة أسفل موضعه. ويكون هذا prefix count المستخرج من الاقتراع هو فهرسه في النتيجة المضغوطة.

int slot = __popc(bits & ((1u << lane) - 1));

اختيار مسار قائد

أحيانًا ينبغي لمسار واحد تنفيذ عمل مشترك. وتكون أقل بت مضبوطة في نتيجة الاقتراع، التي يعثر عليها ffs، قائدًا طبيعيًا يمكن لكل مسارات warp الاتفاق عليه.

مرّروا قناعًا دائمًا

مثل عمليات التبديل، تتلقى دوال التصويت المضمنة mask للمسارات النشطة. تساهم المسارات غير النشطة ببت قيمتها 0، لذا مرّروا المجموعة الصحيحة لتجنب عدّ المسارات غير الموجودة.

تنسيق منخفض التكلفة

تتطلب عمليات التصويت تعليمة واحدة ولا تلمس الذاكرة. وهي تتيح لـ warp coordinate القرارات بتكلفة أقل بكثير من العمليات الذرية أو أعلام الذاكرة المشتركة.

تحقق سريع

تذكّروا ما الذي تعيده ballot_sync إلى كل مسار.

مراجعة

استطلعتم warp باستخدام ballot والتصويت: عددتم القيم الصحيحة، وفحصتم حالتي الكل أو أيّ، وضغطتم التدفقات بتكلفة منخفضة. التالي: المجموعات التعاونية للمزامنة المرنة. ✨

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

هل درس «دوال Ballot وVote» مجاني؟

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

ماذا ستتعلم في «دوال Ballot وVote»؟

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

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

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

كم من الوقت يستغرق درس «دوال Ballot وVote»؟

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

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

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

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

  1. Warps وLanes وMasks
  2. استخدام __shfl_down_sync للاختزال
  3. دوال Ballot وVote
  4. Cooperative Groups
← العودة إلى CUDA Academy