13.1.18. De code-profiler

Window → Show Code Profiler opent een profiler op functieniveau voor de firmware die op de verbonden camera draait: welke C-functies draaiden, hoe vaak, en waar de microseconden naartoe gingen, live gestreamd terwijl een script wordt uitgevoerd. Het beantwoordt de vraag die de FPS-teller oproept – waarom is deze pijplijn traag – op het niveau van de eigen code van de camera.

Ondersteuning voor profileren wordt in de firmware gecompileerd, niet altijd aanwezig: de camera moet firmware draaien die is gebouwd met PROFILE_ENABLE=1, anders blijft het menu-item uitgeschakeld. Het bouwen van zulke firmware maakt deel uit van de aangepaste-bouwworkflow die wordt beschreven in De firmware bouwen.

Het venster Code Profiler: de functietabel gevuld met aanroeptellingen, timingkolommen, percentages en twee kolommen met hardware-gebeurtenistellers, met de besturingen Flat/Tree en Inclusive/Exclusive bovenaan en de totalenregel onderaan

De profiler die een script ziet draaien: aanroepen per functie, timing en percentage van de totale tijd, met twee hardware-gebeurtenistellers in de meest rechtse kolommen en de totalenregel eronder.

Het venster is een sorteerbare tabel met functies met hun aanroeptellingen, minimum, maximum, totaal en gemiddeld aantal microseconden, gemiddeld aantal cycli en percentage van de totale tijd, met een totalenregel eronder en een filtervak om functies op naam te vinden. Functienamen komen uit het ELF-bestand van de firmware – richt het firmware-padveld van het venster op de .elf die de build produceert, en adressen worden naar namen omgezet.

Twee weergavebesturingen ordenen de gegevens. Flat rangschikt elke functie onafhankelijk – de weergave voor “wat is de duurste afzonderlijke functie.” Tree nestelt aangeroepenen onder aanroepers en toont hoe tijd zich langs de aanroepketen opsplitst. Onafhankelijk daarvan rekent Inclusive een functie de tijd aan die wordt besteed in alles wat zij aanroept, terwijl Exclusive alleen de eigen body van de functie telt – inclusive vindt het dure subsysteem, exclusive vindt de dure lus. Reset zet de tellers op nul, wat de manier is om één fase van een pijplijn afzonderlijk te meten: reset, laat het draaien, lees af.

De profiler kan ook hardware-gebeurtenistellers tonen – cache-missers, verkeerd voorspelde branches en de andere gebeurtenissen die de processor kan tellen – naast de timingkolommen; selecteer ze in hetzelfde venster bij firmware die met de ondersteuning is gebouwd.

Zie ook

De CLI van het openmv-pakket kan dezelfde profileringsgegevens vanaf de opdrachtregel over een live stream leggen – zie De openmv CLI.