13.1.18. מנתח הקוד (profiler)¶
Window → Show Code Profiler פותח מנתח (profiler) ברמת הפונקציה עבור הקושחה הרצה על המצלמה המחוברת: אילו פונקציות C רצו, באיזו תדירות, ולאן הלכו המיקרו-שניות, משודר בשידור חי בעת שסקריפט מתבצע. הוא עונה על השאלה שמונה ה-FPS מעלה – מדוע צינור העיבוד הזה איטי – ברמת הקוד של המצלמה עצמה.
תמיכת הניתוח (profiling) מהודרת לתוך הקושחה, ואינה תמיד נוכחת: המצלמה חייבת להריץ קושחה שנבנתה עם PROFILE_ENABLE=1, ופריט התפריט נשאר מושבת אחרת. בניית קושחה כזו היא חלק מתהליך הבנייה המותאם המכוסה ב-בניית הקושחה.
המנתח (profiler) צופה בהרצת סקריפט: קריאות לכל פונקציה, תזמון, ואחוז מסך כל הזמן, עם שני מוני אירועי חומרה בעמודות הימניות ביותר ושורת הסיכומים מתחת.¶
החלון הוא טבלה ניתנת למיון של פונקציות עם מספרי הקריאות שלהן, המיקרו-שניות המינימליות, המקסימליות, הכוללות והממוצעות, מחזורי השעון הממוצעים, ואחוז מסך כל הזמן, עם שורת סיכומים מתחת ותיבת סינון למציאת פונקציות לפי שם. שמות הפונקציות מגיעים מקובץ ה-ELF של הקושחה – כוון את שדה נתיב הקושחה של החלון אל ה-.elf שהופק על ידי הבנייה, וכתובות יומרו לשמות.
שני פקדי תצוגה מארגנים את הנתונים. Flat מדרג כל פונקציה באופן עצמאי – התצוגה עבור ”מהי הפונקציה היקרה ביותר הבודדה.“ Tree מקנן את הנקראים (callees) תחת הקוראים (callers), ומראה כיצד הזמן מתפרק במורד שרשרת הקריאות. באופן בלתי תלוי, Inclusive מחייב פונקציה בזמן שהוצא בכל מה שהיא קראה, בעוד Exclusive סופר רק את גוף הפונקציה עצמה – inclusive מוצא את תת-המערכת היקרה, exclusive מוצא את הלולאה היקרה. Reset מאפס את המונים, וזו הדרך שבה מודדים שלב אחד של צינור עיבוד בבידוד: אפס, תן לו לרוץ, קרא.
המנתח (profiler) יכול גם להציג מוני אירועי חומרה – החטאות מטמון (cache misses), ניבויי הסתעפות שגויים, ושאר האירועים שהמעבד יכול לספור – לצד עמודות התזמון; בחר אותם באותו חלון על קושחה שנבנתה עם התמיכה.
ראה גם
ה-CLI של חבילת openmv יכול לשכב את אותם נתוני ניתוח (profiling) על זרם חי משורת הפקודה – ראה כלי שורת הפקודה openmv.