0Pricing
CUDA Academy · درس

القراءات المتماسكة مقابل المتقطعة

تعرّف على أهمية الربط بين الخيوط والعناوين.

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

الأمر كله متعلق بالربط

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

نمط الوصول المتحد

عندما تقرأ الخيوط المتجاورة عناوين متجاورة، تغطي مجموعة الخيوط نطاقًا متصلًا واحدًا. ويُسمى هذا الترتيب المنظم وصولًا متحدًا.

int i = blockIdx.x * blockDim.x + threadIdx.x;
float v = data[i];

سبب نجاحه

يصل الخيط 0 إلى الفهرس 0، والخيط 1 إلى الفهرس 1، وهكذا. تقع العناوين الـ32 كلها في سطر واحد محاذٍ، لذا تحتاج GPU إلى معاملة واحدة.

يدخل التباعد

الـتباعد هو الفجوة الثابتة بين العناوين التي تلمسها الخيوط المتتالية. وبمجرد أن تتجاوز هذه الفجوة عنصرًا واحدًا، يبدأ الوصول المتحد في الانهيار.

float v = data[i * stride];

القراءات المتباعدة تنتشر

عند استخدام تباعد مقداره 2، يقرأ الخيط 0 القيمة 0، والخيط 1 القيمة 2، والخيط 2 القيمة 4. وتمتد مجموعة الخيوط الآن عبر ضعف مساحة الذاكرة، لذا تحتاج إلى مزيد من المعاملات.

تتزايد التكلفة

مضاعفة الخطوة تؤدي تقريبًا إلى مضاعفة عدد الأسطر التي يتم الوصول إليها. وقد تدفع الخطوات الكبيرة الـwarp إلى تنفيذ معاملات كثيرة، مع استخدام جزء ضئيل فقط من كل سطر.

فخ شائع

إن إسناد عمود كامل من مصفوفة مرتبة صفّيًا إلى كل خيط ينشئ خطوة كبيرة جدًا. قد يبدو ذلك مرتبًا في الشيفرة، لكنه يؤدي خفيةً إلى تشتيت كل warp.

float v = matrix[threadIdx.x * width + row];

بدّل طريقة الإسناد

غالبًا ما يكون الحل مجرد تبديل الفهرس الذي يتغير بأسرع معدل مع الخيط. اجعل الخيوط المتتالية تسير عبر مواقع متتالية في الذاكرة، وعندها تصبح القراءات متجمعة مرة أخرى.

float v = matrix[row * width + threadIdx.x];

الإزاحات تضر أيضًا

حتى النمط المتجمع يتأثر إذا بدأ من منتصف السطر. إذ تؤدي الإزاحة غير المحاذاة إلى نقل الـwarp عبر حدّ فاصل، فتقسّم قراءة واحدة إلى قراءتين.

فكّر بالـwarps

لتقييم أحد الأنماط، لا تتخيل خيطًا واحدًا. تخيل المسارات الـ32 كلها في الوقت نفسه، واسأل عن عدد الأسطر التي تغطيها عناوينها مجتمعة. 🔍

قاعدة تقريبية

اجعل الفهرس الأسرع تغيرًا يتبع threadIdx.x. هذه العادة وحدها تحافظ على تجميع معظم قراءاتك العامة دون أي جهد إضافي.

تحقق سريع

اختر نمط الوصول الذي يحقق أفضل تجميع.

مراجعة

رأيت أن القراءات المتجمعة تُبقي العناصر المتجاورة معًا، بينما تؤدي الخطوة إلى تشتيتها عبر الأسطر. احرص على أن يقود threadIdx.x الفهرس الأسرع تغيرًا. 🎉

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

هل درس «القراءات المتماسكة مقابل المتقطعة» مجاني؟

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

ماذا ستتعلم في «القراءات المتماسكة مقابل المتقطعة»؟

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

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

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

كم من الوقت يستغرق درس «القراءات المتماسكة مقابل المتقطعة»؟

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

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

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

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

  1. ما هي معاملة الذاكرة
  2. القراءات المتماسكة مقابل المتقطعة
  3. بنية المصفوفات مقابل مصفوفة البنى
  4. قياس عرض النطاق الفعلي
← العودة إلى CUDA Academy