الدرس 8: عنق الزجاجة — Compute-bound مقابل Memory-bound
قبل التحسين — تسأل: ما الذي يعيق الأمور فعلاً؟ كل kernel يكون إما compute-bound (محدود بـ FLOPs، حيث يحسب الـ GPU بكامل طاقته) أو memory-bound (محدود بعرض النطاق للذاكرة، حيث ينتظر الـ GPU البيانات). التحسين دون هذا التشخيص هو مجرد تخمين. في هذا الدرس نتعلم تشخيص عنق الزجاجة باستخدام arithmetic inte
compute-bound هو طاهٍ سريع ينتظر لأنه لا يوجد ما يكفي من الأفران — عنق الزجاجة هو العمل نفسه. memory-bound هو أفران خاملة لكن المكونات لا تصل من المخزن بالسرعة الكافية — عنق الزجاجة هو التوصيل. كل مشكلة تحتاج حلاً مختلفاً.
- Compute-bound
- الـ kernel محدود بقدرة الحساب (FLOPs). الـ GPU مشغول بالكامل؛ للتسريع — دقة أقل أو kernels أفضل.
- Memory-bound
- الـ kernel محدود بعرض النطاق للذاكرة. الـ GPU ينتظر البيانات؛ للتسريع — fusion وحركة ذاكرة أقل.
- Arithmetic intensity
- نسبة FLOPs لكل byte مقروء/مكتوب. منخفضة → memory-bound؛ مرتفعة → compute-bound.