CUDA Academy · درس

بنية المصفوفات مقابل مصفوفة البنى

اختر تخطيطات تحقق الوصول المتماسك.

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

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

طريقتان لتخزين السجلات

لنفترض أن كل جسيم يحتوي على x وy وz. يمكنك إبقاء هذه القيم معًا أو فصلها، وهذا الاختيار يغيّر طريقة تجميع كل warp للبيانات.

مصفوفة من البنى

يضع تخطيط C++ الطبيعي حقول كل سجل متجاورة جنبًا إلى جنب. وهذا ما يسمى array of structs، ويُختصر غالبًا إلى AoS.

struct Particle { float x, y, z; };
Particle p[N];

لماذا يؤدي AoS إلى التشتيت

عندما يقرأ warp قيمة x فقط من كل سجل، تكون قيم x متباعدة بمقدار 12 بايتًا. وتؤدي هذه الخطوة المضمنة إلى هدر معظم كل سطر يتم جلبه.

float xi = p[i].x; // x values are spaced by sizeof(Particle)

بنية من المصفوفات

اعكس التنظيم: خزّن جميع قيم x معًا، وجميع قيم y معًا، وجميع قيم z معًا. وهذا ما يسمى structure of arrays، أو SoA.

float x[N];
float y[N];
float z[N];

لماذا يحقق SoA التجميع

عندئذ تؤدي قراءة x لـ32 خيطًا إلى الوصول إلى 32 قيمة float متجاورة. وهذا يعني سطرًا واحدًا محاذيًا ومعاملة واحدة منظمة لكل حقل.

float xi = x[i]; // neighbors land in one line

اختبار الوصول إلى الحقول

اسأل كيف تقرأ النواة البيانات. فإذا كانت الخيوط تمر عبر حقل واحد في سجلات عديدة، فإن SoA يكاد يفوز دائمًا على GPU.

متى يكون AoS مناسبًا

إذا كان كل خيط يستخدم جميع حقول سجل واحد معًا، فإن AoS يبقيها في سطر واحد ويظل ملائمًا لـذاكرة التخزين المؤقت.

عرض النطاق، وليس مجرد أسلوب

لا يتعلق الأمر بالذوق. فقد يؤدي الانتقال من AoS إلى SoA إلى مضاعفة معدل النقل الفعلي للحساب نفسه، وذلك ببساطة عبر تقليل البايتات المهدرة.

حل وسط هجين

يمكنك تجميع بضعة سجلات، ثم فصل الحقول داخل كل مجموعة. ويوازن تخطيط AoSoA هذا بين التجميع ومحلية ذاكرة التخزين المؤقت.

صمّم قبل أن تحسّن الأداء

يصعب تغيير التخطيط في مرحلة متأخرة، لأنه يؤثر في كل نواة وكل عملية نسخ. اختر شكل SoA أو AoS مبكرًا، مسترشدًا بأنماط الوصول. 🧩

الخلاصة العملية للتخطيط

قاعدة تقريبية لـGPU: افصل الحقول في مصفوفات بحيث يقرأ كل warp نطاقًا متجاورًا. وفضّل SoA في النوى التي تعالج الحقول واحدًا تلو الآخر.

تحقق سريع

اختر التخطيط الذي يحقق تجميع هذا الوصول.

مراجعة

قارنت بين AoS وSoA: اجمع الحقول معًا عند استخدام السجل كاملًا، لكن افصلها في مصفوفات عندما تمر الـwarps عبر حقل واحد في كل مرة. 🎉

البدء مجانًا

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

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

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

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

هل درس «بنية المصفوفات مقابل مصفوفة البنى» مجاني؟

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

ماذا ستتعلم في «بنية المصفوفات مقابل مصفوفة البنى»؟

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

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

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

كم من الوقت يستغرق درس «بنية المصفوفات مقابل مصفوفة البنى»؟

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

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

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

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

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