CUDA Academy · درس

مأزق Default Stream

كيف يقوم stream 0 بتسلسل كل شيء.

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

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

ما هو التدفق؟

التدفق هو قائمة انتظار مرتّبة لأعمال GPU. تعمل العمليات الموجودة في التدفق نفسه واحدة تلو الأخرى، وبالترتيب الذي أصدرتها به. ⏳

التدفق الافتراضي

إذا لم تحدّد اسم تدفق، فستُضاف كل الاستدعاءات إلى التدفق الافتراضي، الذي يُسمّى أيضًا التدفق 0. هذا هو المكان الذي كانت تعمل فيه كل أعمالك دون أن تلاحظ.

لماذا يُعدّ فخًا؟

التدفق الافتراضي متزامن: فهو ينتظر انتهاء التدفقات الأخرى، وهي تنتظره بدورها. لا يحدث أي تداخل، ولذلك تبقى وحدة GPU خاملة بين الخطوات.

تسلسل كل شيء

عندما تصدر عملية نسخ، ثم نواة، ثم عملية نسخ أخرى على التدفق 0، فإنها تعمل بالتتابع الصارم، واحدة تلو الأخرى. ولا يمكن لـ GPU بدء الخطوة الثانية قبل انتهاء الأولى.

cudaMemcpy(d_a, h_a, n, cudaMemcpyHostToDevice);
kernel<<<grid, block>>>(d_a);
cudaMemcpy(h_a, d_a, n, cudaMemcpyDeviceToHost);

عتاد مهدَر

تحتوي وحدات GPU الحديثة على محركات منفصلة للحوسبة والنسخ. لكن على التدفق الافتراضي، يتناوب هذان المحركان بدلًا من العمل معًا.

التكلفة الخفية لعمليات النسخ

تُنقل البيانات عبر PCIe ببطء. وعندما يتعذر تداخل عمليات النسخ مع الحوسبة، يُضاف زمن النقل مباشرةً إلى إجمالي زمن التشغيل.

المزامنة الضمنية

تكون العديد من استدعاءات التدفق الافتراضي حاجبة على المضيف أيضًا. فلا تعود cudaMemcpy إلا بعد اكتمال النسخ، مما يوقف CPU لديك.

السلوك القديم

افتراضيًا، ينتظر العمل في أي تدفق التدفق 0، وينتظر التدفق 0 انتهاء العمل في التدفقات الأخرى. هذه القاعدة القديمة تقضي بهدوء على التزامن الذي ظننت أنك تملكه.

مخطط أداء كاشف

في أداة تحليل الأداء، يظهر فخ التدفق الافتراضي على شكل مسار واحد نشط تتخلله فجوات، بينما تبقى محركات النسخ والحوسبة خاملة وهي تنتظر بعضها.

المخرج

الحل هو إصدار الأعمال المستقلة على تدفقات منفصلة. عندها يمكن لعمليات النسخ والنوى أن تعمل في الوقت نفسه وتملأ تلك الفجوات الخاملة.

التدفقات الافتراضية لكل خيط

يمنح الخيار --default-stream per-thread كل خيط مضيف تدفقًا افتراضيًا خاصًا به، مما يخفف هذا الفخ من دون إعادة كتابة كل استدعاء.

nvcc --default-stream per-thread app.cu -o app

تحقّق سريع

لماذا يؤثر وضع كل الأعمال في التدفق الافتراضي سلبًا في الأداء؟

مراجعة

يُسلسل التدفق الافتراضي أعمال GPU ويمنع التداخل. ولزيادة السرعة، ستنقل المهام المستقلة إلى تدفقاتها الخاصة في الخطوة التالية. 🚀

البدء مجانًا

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

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

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

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

هل درس «مأزق Default Stream» مجاني؟

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

ماذا ستتعلم في «مأزق Default Stream»؟

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

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

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

كم من الوقت يستغرق درس «مأزق Default Stream»؟

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

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

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

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

  1. مأزق Default Stream
  2. إنشاء Streams واستخدامها
  3. الأحداث لقياس الوقت والمزامنة
  4. تداخل النسخ والحساب
← العودة إلى CUDA Academy