الدرس 36: مشروع ختامي — تحسين kernel من الطرف إلى الطرف
هذا هو الدرس الختامي للدورة. لن نتعلّم آلية جديدة — بل سنربط كل ما تعلّمناه بالفعل في عملية واحدة: كيف نأخذ kernel ساذجًا وبطيئًا ونجعله سريعًا. قائمة التحقق ليست سحرًا، بل هي سلسلة من الفحوصات رأيناها بالفعل كلًّا على حِدة. أولًا، coalescing: التأكد من أن الـ threads المتتالية تصل إلى عناوين global
تحسين kernel أشبه بترميم منزل: لا يمكنك أن تكتفي بالطلاء وتأمل الأفضل. تفحص ما هو معطوب فعلًا — السباكة أو الأسلاك أو السقف — وتُصلح ذلك. وهناك مقياس ضغط واحد يجب ألا تتجاهله: القياس (Nsight). بدون قياس، ستُصلح الحائط الخطأ.
- قائمة تحقق التحسين
- سلسلة فحوصات لتحسين kernel: coalescing، و shared memory، وتقليل divergence، وضبط occupancy، والقياس في Nsight.
- عنق الزجاجة (bottleneck)
- القيد الحقيقي الذي يُبطئ الـ kernel. إصلاح شيء آخر لن يفيد حتى تعالجه هو تحديدًا.
- قِسْ أولًا
- استخدام Nsight لتحديد عنق الزجاجة قبل تغيير الكود، بدلًا من تخمين أي تحسينة مطلوبة.
- تقليل القراءات الـ global
- تحميل البيانات المُعاد استخدامها إلى shared memory يقلّص القراءات من الذاكرة الـ global البطيئة، مثلًا من K إلى K/TILE مع tiling.