الدرس 32: Streams والتزامن
إن الـ stream في CUDA هو طابور من العمليات التي تُنفَّذ بالترتيب الذي أُرسِلت به إليه. القاعدة الأساسية: العمليات في الـ stream نفسه تُنفَّذ بالتتابع (بالترتيب)، لكن العمليات في streams مختلفة يمكن أن تتداخل في الزمن. هذا ما يُطلِق التسريع الكبير: بينما يحسب الـ GPU الـ kernel على قطعة واحدة من البي
الـ stream مثل صندوق الدفع في السوبرماركت: الزبائن في صندوق واحد ينتظرون في الطابور، واحدًا تلو الآخر. افتح صندوقين (streams اثنين) فيُخدَم زبونان في وقت واحد. أما إذا تزاحم الجميع في صندوق واحد، فلا يوجد أي تزامن.
- stream
- طابور من عمليات الـ GPU تُنفَّذ بترتيب الإرسال. العمليات في الـ stream نفسه تُنفَّذ بالتتابع؛ وفي streams مختلفة يمكن أن تتداخل.
- الـ stream الافتراضي (stream 0)
- الـ stream الذي تذهب إليه العمليات عندما لا يُحدَّد أي stream. عادةً ما يكون مُزامِنًا ويمنع التداخل إذا مرّ كل شيء عبره.
- cudaMemcpyAsync
- نسخ ذاكرة غير حاجب يأخذ stream. يتيح تداخل الـ copy مع الـ compute عند استخدامه مع ذاكرة pinned.
- التداخل (overlap)
- تنفيذ عمليات مختلفة في الوقت نفسه — مثلًا copy في stream واحد بينما يعمل الـ compute في آخر — لتقليل الزمن الكلي.