13.1.18. 코드 프로파일러¶
Window → Show Code Profiler는 연결된 카메라에서 실행 중인 펌웨어를 위한 함수 수준 프로파일러를 엽니다. 어떤 C 함수가 실행되었는지, 얼마나 자주 실행되었는지, 마이크로초가 어디로 갔는지를 스크립트 실행 중에 실시간으로 스트리밍합니다. 이는 FPS 카운터가 제기하는 질문, 즉 이 파이프라인이 왜 느린지를 카메라 자체 코드의 수준에서 답합니다.
프로파일링 지원은 펌웨어에 컴파일되며 항상 존재하는 것은 아닙니다. 카메라는 PROFILE_ENABLE=1로 빌드된 펌웨어를 실행하고 있어야 하며, 그렇지 않으면 메뉴 항목이 비활성화된 상태로 유지됩니다. 그러한 펌웨어를 빌드하는 것은 펌웨어 빌드하기에서 다루는 사용자 정의 빌드 워크플로의 일부입니다.
스크립트 실행을 관찰하는 프로파일러: 함수별 호출 횟수, 타이밍, 전체 시간 대비 백분율이 표시되며, 가장 오른쪽 열에는 두 개의 하드웨어 이벤트 카운터가, 그 아래에는 합계 줄이 있습니다.¶
이 창은 함수들의 정렬 가능한 테이블로, 호출 횟수, 최소·최대·총·평균 마이크로초, 평균 사이클, 전체 시간 대비 백분율을 보여 주며, 아래에는 합계 줄이, 이름으로 함수를 찾기 위한 필터 상자가 있습니다. 함수 이름은 펌웨어의 ELF 파일에서 나옵니다. 창의 펌웨어 경로 필드를 빌드로 생성된 .elf로 지정하면 주소가 이름으로 해석됩니다.
두 가지 보기 컨트롤이 데이터를 정리합니다. Flat은 모든 함수를 독립적으로 순위 매깁니다. 즉 “단일 함수 중 가장 비용이 큰 것은 무엇인가”를 보는 보기입니다. Tree는 피호출자를 호출자 아래에 중첩하여, 시간이 호출 체인을 따라 어떻게 분해되는지 보여 줍니다. 이와 별개로, Inclusive는 함수가 호출한 모든 것에 소요된 시간을 그 함수에 청구하고, Exclusive는 함수 자체 본문만 계산합니다. inclusive는 비용이 큰 서브시스템을 찾고, exclusive는 비용이 큰 루프를 찾습니다. Reset은 카운터를 0으로 만드는데, 이것이 파이프라인의 한 단계를 따로 측정하는 방법입니다. 즉 재설정하고, 실행시키고, 읽습니다.
프로파일러는 하드웨어 이벤트 카운터(캐시 미스, 분기 예측 실패, 그 외 프로세서가 셀 수 있는 이벤트들)도 타이밍 열과 함께 표시할 수 있습니다. 해당 지원이 포함되도록 빌드된 펌웨어에서 같은 창에서 이들을 선택하십시오.
더 보기
openmv 패키지의 CLI는 동일한 프로파일링 데이터를 명령줄에서 실시간 스트림 위에 오버레이할 수 있습니다. openmv CLI를 참조하십시오.