13.1.18. Der Code-Profiler

Window → Show Code Profiler öffnet einen funktionsbasierten Profiler für die Firmware, die auf der verbundenen Kamera läuft: welche C-Funktionen ausgeführt wurden, wie oft und wohin die Mikrosekunden geflossen sind, live übertragen während ein Skript ausgeführt wird. Er beantwortet die Frage, die der FPS-Zähler aufwirft – warum ist diese Pipeline langsam – auf der Ebene des kameraeigenen Codes.

Die Profiling-Unterstützung wird in die Firmware einkompiliert und ist nicht immer vorhanden: Die Kamera muss eine mit PROFILE_ENABLE=1 gebaute Firmware ausführen, andernfalls bleibt der Menüeintrag deaktiviert. Der Bau einer solchen Firmware ist Teil des Custom-Build-Workflows, der unter Die Firmware bauen behandelt wird.

Das Fenster Code Profiler: die Funktionstabelle gefüllt mit Aufrufzahlen, Timing-Spalten, Prozentsätzen und zwei Spalten für Hardware-Ereigniszähler, mit den Steuerelementen Flat/Tree und Inclusive/Exclusive oben und der Summenzeile unten

Der Profiler beobachtet die Ausführung eines Skripts: Aufrufe pro Funktion, Timing und Prozentsatz der Gesamtzeit, mit zwei Hardware-Ereigniszählern in den äußersten rechten Spalten und der Summenzeile darunter.

Das Fenster ist eine sortierbare Tabelle von Funktionen mit ihren Aufrufzahlen, Minimum, Maximum, Gesamt- und Durchschnitts-Mikrosekunden, durchschnittlichen Zyklen und Prozentsatz der Gesamtzeit, mit einer Summenzeile darunter und einem Filterfeld zum Auffinden von Funktionen nach Name. Die Funktionsnamen stammen aus der ELF-Datei der Firmware – richten Sie das Firmware-Pfad-Feld des Fensters auf die vom Build erzeugte .elf, und Adressen werden zu Namen aufgelöst.

Zwei Ansichtssteuerungen organisieren die Daten. Flat ordnet jede Funktion unabhängig – die Ansicht für „welche einzelne Funktion ist die teuerste.“ Tree verschachtelt die aufgerufenen Funktionen unter ihren Aufrufern und zeigt, wie sich die Zeit entlang der Aufrufkette aufschlüsselt. Unabhängig davon rechnet Inclusive einer Funktion die Zeit zu, die in allem von ihr Aufgerufenen verbracht wurde, während Exclusive nur den eigenen Rumpf der Funktion zählt – inclusive findet das teure Subsystem, exclusive findet die teure Schleife. Reset setzt die Zähler auf null, womit Sie eine Stufe einer Pipeline isoliert messen: zurücksetzen, laufen lassen, ablesen.

Der Profiler kann zudem Hardware-Ereigniszähler anzeigen – Cache-Fehlzugriffe, Branch-Fehlvorhersagen und die anderen Ereignisse, die der Prozessor zählen kann – neben den Timing-Spalten; wählen Sie sie im selben Fenster bei Firmware aus, die mit der entsprechenden Unterstützung gebaut wurde.

Siehe auch

Das CLI des openmv-Pakets kann dieselben Profiling-Daten von der Kommandozeile aus über einen Live-Stream einblenden – siehe Das openmv-CLI.