13.1.18. 程式碼分析器¶
Window → Show Code Profiler 會為所連接相機上執行的韌體開啟一個函式層級的分析器:哪些 C 函式執行了、執行了多少次,以及時間(微秒)花在何處,並在指令碼執行時即時串流呈現。它回答了 FPS 計數器所引出的問題 -- 這條管線為什麼這麼慢 -- 而且是在相機自身程式碼的層級上回答。
分析功能是編譯進韌體內的,並非始終存在:相機必須執行以 PROFILE_ENABLE=1 建置的韌體,否則該選單項目會保持停用狀態。建置這類韌體屬於 建置韌體 所涵蓋的自訂建置流程的一部分。
分析器正在觀察一個執行中的指令碼:各函式的呼叫次數、計時與佔總時間的百分比,最右側的兩個欄位為硬體事件計數器,下方則為合計列。¶
此視窗是一個可排序的函式表格,列出各函式的呼叫次數、最小、最大、總計與平均微秒數、平均週期數,以及佔總時間的百分比,下方有一條合計列,並提供一個可依名稱尋找函式的篩選方塊。函式名稱來自韌體的 ELF 檔案 -- 將視窗的韌體路徑欄位指向建置所產生的 .elf,位址便會解析為名稱。
兩個檢視控制項用於整理資料。Flat 會獨立地為每個函式排名 -- 適用於回答「哪一個是單一最昂貴的函式」。Tree 則將被呼叫者巢狀置於呼叫者之下,呈現時間如何沿著呼叫鏈分解。另外,Inclusive 會將一個函式所呼叫的一切所花費的時間都計入該函式,而 Exclusive 則只計算該函式本身主體 -- inclusive 可找出昂貴的子系統,exclusive 則可找出昂貴的迴圈。Reset 會將計數器歸零,這正是你單獨測量管線某一階段的方法:重置、讓它執行、讀取結果。
分析器也能顯示硬體事件計數器 -- 快取未命中、分支預測失誤,以及處理器所能計數的其他事件 -- 與計時欄位並列;在以該支援功能建置的韌體上,可於同一視窗中選取它們。
請參閱
openmv 套件的 CLI 也能從命令列將相同的分析資料疊加在即時串流上 -- 詳見 openmv CLI。