שיעור 8: צוואר הבקבוק — Compute-bound מול Memory-bound
לפני שמאיצים — שואלים: מה בכלל מעכב? כל kernel הוא או compute-bound (מוגבל ב-FLOPs, ה-GPU מחשב במלוא הכוח) או memory-bound (מוגבל ברוחב הפס לזיכרון, ה-GPU מחכה לנתונים). אופטימיזציה ללא האבחנה הזו היא ניחוש. בשיעור הזה נלמד לאבחן את הצוואר עם arithmetic intensity ו-profiler.
compute-bound זה טבח מהיר שמחכה כי אין מספיק תנורים — הצוואר הוא העבודה עצמה. memory-bound זה תנורים פנויים אבל המצרכים לא מגיעים מהמחסן מספיק מהר — הצוואר הוא ההובלה. כל בעיה דורשת פתרון אחר.
- Compute-bound
- ה-kernel מוגבל ביכולת החישוב (FLOPs). ה-GPU עובד במלואו; כדי להאיץ — דיוק נמוך יותר או kernels טובים יותר.
- Memory-bound
- ה-kernel מוגבל ברוחב הפס לזיכרון. ה-GPU מחכה לנתונים; כדי להאיץ — fusion ופחות תנועת זיכרון.
- Arithmetic intensity
- היחס FLOPs לכל byte שנקרא/נכתב. נמוך → memory-bound; גבוה → compute-bound.