Reduce وScan وSort في Thrust
بدائيات عالية المستوى باستدعاء واحد
Reduce وScan وSort في Thrust درس مجاني في CUDA Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في CUDA Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة CUDA Academy 4 دروس في المجموع.
خوارزميات صعبة، وسطر واحد
يصعب كتابة عمليات الاختزال والمسح والفرز بسرعة يدويًا. وتوفّر لك Thrust تطبيقات محسّنة منها عبر استدعاء دالة واحد. 🎁
يختزل reduce البيانات إلى قيمة واحدة
يدمج thrust::reduce كل عنصر في نتيجة واحدة، مثل جمع مصفوفة، وكل ذلك بالتوازي خلف الكواليس.
int total = thrust::reduce(d.begin(), d.end());معاملات اختزال مخصّصة
يستخدم Reduce الجمع افتراضيًا، لكن يمكنك تمرير قيمة ابتدائية وعامل ثنائي لحساب حاصل ضرب أو قيمة عظمى أو أي عملية تجميعية.
int m = thrust::reduce(d.begin(), d.end(),
0, thrust::maximum<int>());يحافظ scan على المجموع التراكمي
ينتج scan، أو المجموع التراكمي، المجموع الجاري عند كل موضع. وهو أساس الضغط والفرز وتخصيص التدفقات.
الشامل مقابل الحصري
يضمّن inclusive_scan العنصر الحالي في مجموعه، بينما لا يفعل exclusive_scan ذلك. ويؤدي اختيار النوع الصحيح إلى تجنّب خطأ بمقدار واحد.
thrust::inclusive_scan(d.begin(), d.end(),
out.begin());ليس من الواضح تنفيذ scan بالتوازي
يبدو المجموع التراكمي تسلسليًا، ومع ذلك تنفّذه Thrust بالتوازي باستخدام خوارزمية شجرية ذكية لا تحتاج إلى كتابتها بنفسك.
الفرز في المكان
يرتّب thrust::sort device_vector في مكانه باستخدام فرز radix أو merge سريع على GPU، وهو أسرع بكثير من فرز CPU مع البيانات الكبيرة.
thrust::sort(d.begin(), d.end());الفرز حسب المفتاح
يفرز sort_by_key مصفوفةً واحدة، ويعيد ترتيب مصفوفة قيم ثانية لتطابقها، وهو مثالي للحفاظ على محاذاة السجلات مع مفاتيحها.
thrust::sort_by_key(keys.begin(),
keys.end(), values.begin());تركيب العمليات البدائية
تربط مسارات العمل الحقيقية هذه العمليات: transform ثم reduce، أو sort ثم scan. وكل خطوة استدعاء محسّن واحد، فتتمكن من التركيز على المنطق.
Fused transform_reduce
يطبّق transform_reduce التحويل والجمع في مرور واحد، فيحسب أمورًا مثل الجداء النقطي أو مجموع المربعات من دون مصفوفة مؤقتة.
float ss = thrust::transform_reduce(
d.begin(), d.end(), sq, 0.0f, thrust::plus<float>());دع المكتبة تتولى المهمة
هذه العمليات البدائية محسّنة بدرجة كبيرة من NVIDIA. وغالبًا ما يكون استخدامها أولًا أفضل من نواة مخصّصة، كما يوفر ساعات من العمل.
تحقّق سريع
تذكّر ما الذي ينتجه المجموع التراكمي.
مراجعة
اختزلت البيانات باستخدام reduce، وأنشأت المجاميع الجارية باستخدام scan، ورتّبت المصفوفات باستخدام sort، ودمجت الخطوات باستخدام transform_reduce. 🏁
تعلم C++ مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 30
- الدروس
- 120
الأسئلة الشائعة
هل درس «Reduce وScan وSort في Thrust» مجاني؟
نعم — نص درس «Reduce وScan وSort في Thrust» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة CUDA Academy، انتقل إلى CoddyKit PRO. تتضمن دورة CUDA Academy 4 دروس في المجموع.
ماذا ستتعلم في «Reduce وScan وSort في Thrust»؟
بدائيات عالية المستوى باستدعاء واحد تتمرن على CUDA Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ CUDA Academy؟
لا تُشترط خبرة سابقة. CUDA Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «Reduce وScan وSort في Thrust»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس CUDA Academy هذا؟
نعم. كل درس في CUDA Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- استخدام cuBLAS GEMM على النحو الصحيح
- متجهات وتحويلات Thrust
- Reduce وScan وSort في Thrust
- cuDNN للتعلّم العميق