שיעור 7: למדוד נכון — warmup, synchronize ואחוזונים
המספר הראשון שתמדוד יהיה כמעט תמיד שקר. ה-GPU רץ אסינכרונית, אז time.time() תופס רק את ה-launch ולא את החישוב. הריצה הראשונה משלמת על הקצאות ו-autotuning. וממוצע בודד מסתיר את הזנב שמשתמשים באמת מרגישים. בשיעור הזה נלמד את שלושת הכללים של מדידה אמינה: warmup, synchronize, אחוזונים.
מדידת זמן ב-GPU היא כמו לצלם רכבת בתנועה: אם תלחץ על הכפתור מוקדם מדי תקבל תמונה ריקה. צריך לחכות שהיא תגיע (synchronize), להתעלם מהחימום (warmup), ולהסתכל גם על הרכבות האיטיות (אחוזונים), לא רק על הממוצע.
- torch.cuda.synchronize()
- ממתין שכל העבודה על ה-GPU תסתיים. חובה לפני ואחרי מדידת זמן, כי קריאות CUDA אסינכרוניות.
- Warmup
- מריצים כמה איטרציות לפני המדידה כדי לעבור את העלויות החד-פעמיות (הקצאות, autotuning, caching).
- אחוזונים (p50/p99)
- p99 הוא הזמן ש-99% מהבקשות עומדות בו. חושף את הזנב האיטי שממוצע מסתיר.