CUDA Academy · درس

تقسيم الجداء الداخلي إلى بلاطات

حمّل بلاطات فرعية من A وB في كل مرحلة.

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

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

فكرة التقسيم إلى بلاطات

يقسم التقسيم إلى بلاطات المصفوفات إلى بلاطات مربعة صغيرة تتسع لها الذاكرة السريعة على الشريحة. وتتعاون الخيوط لتحميل البلاطة مرة واحدة وإعادة استخدامها مرات عديدة.

لماذا الذاكرة المشتركة

توجد البلاطة في ذاكرة __shared__، ويمكن لكل خيط في الكتلة رؤيتها. وتكون قراءتها أسرع بكثير من الوصول إلى الذاكرة العامة مرة بعد أخرى. ⚡

__shared__ float As[TILE][TILE];
__shared__ float Bs[TILE][TILE];

كتلة واحدة، وبلاطة ناتج واحدة

تتولى كل كتلة مسؤولية جزء من الناتج C بحجم TILE في TILE. وتتعاون خيوطها لحساب هذا الجزء كاملًا.

حجم البلاطة يطابق حجم الكتلة

تختار TILE مساويًا لعرض الكتلة، وغالبًا ما يكون 16 أو 32. وبهذا يحمّل كل خيط عنصرًا واحدًا بالضبط من كل بلاطة.

#define TILE 16
dim3 threads(TILE, TILE);

ربط الخيط بموضع في البلاطة

داخل البلاطة، لا يعدو موضع الخيط أن يكون threadIdx. أما صفّه وعموده العامان فما زالا يُستمدان من فهارس الكتلة والخيط.

int ty = threadIdx.y, tx = threadIdx.x;
int row = blockIdx.y*TILE + ty;
int col = blockIdx.x*TILE + tx;

تحميل بلاطة من A

ينسخ كل خيط عنصرًا واحدًا من البلاطة الحالية في A إلى الذاكرة المشتركة. وبذلك تجهّز الكتلة كاملةً جزءًا من A بحجم TILE في TILE.

As[ty][tx] = A[row*N + (phase*TILE + tx)];

تحميل بلاطة من B

في الوقت نفسه، يحمّل كل خيط عنصرًا واحدًا من بلاطة B. والآن توجد البلاطتان على الشريحة، جاهزتين للقراءات المتكررة السريعة.

Bs[ty][tx] = B[(phase*TILE + ty)*N + col];

المزامنة قبل الحساب

استدعِ __syncthreads() لكي ينتهي كل خيط من التحميل قبل أن يقرأ أي خيط البلاطة. يؤدي تخطي هذه الخطوة إلى نتائج عشوائية.

__syncthreads();

الحساب على البلاطة

ينفذ كل خيط الآن حلقة قصيرة على البلاطة، ولا يقرأ إلا من الذاكرة المشتركة. وهذه القراءات أقل تكلفة بكثير من القراءات العامة.

for (int k = 0; k < TILE; ++k)
  sum += As[ty][k] * Bs[k][tx];

مكسب إعادة الاستخدام

يُستخدم كل عنصر محمّل بواسطة TILE من الخيوط بدلًا من خيط واحد. وهذه إعادة استخدام البيانات هي السبب الأساسي وراء سرعة ضرب المصفوفات باستخدام البلاطات.

بلاطة واحدة لا تكفي

لا تغطي البلاطة الواحدة إلا جزءًا من حاصل الضرب النقطي. لذلك تكرر خطوات التحميل والمزامنة والحساب عبر مراحل عديدة، وسيتناول الدرس التالي ذلك.

اختبار سريع

استرجع ترتيب الخطوات عند العمل مع بلاطة مشتركة.

مراجعة

جهزت بلاطات A وB في الذاكرة المشتركة، ثم أجريت المزامنة، وبعدها حسبت باستخدام قراءات رخيصة من الذاكرة على الشريحة. إعادة الاستخدام هي المكسب. والمراحل تأتي لاحقًا. 🧱

البدء مجانًا

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

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

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

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

هل درس «تقسيم الجداء الداخلي إلى بلاطات» مجاني؟

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

ماذا ستتعلم في «تقسيم الجداء الداخلي إلى بلاطات»؟

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

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

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

كم من الوقت يستغرق درس «تقسيم الجداء الداخلي إلى بلاطات»؟

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

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

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

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

  1. نواة Matmul الساذجة
  2. تقسيم الجداء الداخلي إلى بلاطات
  3. التكرار عبر مراحل البلاطات
  4. قياس التسارع
← العودة إلى CUDA Academy