13.1.18. O profiler de código

Window → Show Code Profiler abre um profiler ao nível de funções para o firmware em execução na câmara ligada: quais as funções C que executaram, com que frequência e onde foram gastos os microssegundos, transmitido em tempo real enquanto um script executa. Responde à questão que o contador de FPS levanta – porquê é que este pipeline é lento – ao nível do código da própria câmara.

O suporte de profiling é compilado no firmware, não estando sempre presente: a câmara deve executar um firmware compilado com PROFILE_ENABLE=1, e a entrada de menu fica desativada caso contrário. A compilação de tal firmware faz parte do fluxo de trabalho de compilação personalizada abordado em Compilar o firmware.

The Code Profiler window: the function table populated with call counts, timing columns, percentages, and two hardware event counter columns, with the Flat/Tree and Inclusive/Exclusive controls on top and the totals line at the bottom

O profiler a observar um script em execução: chamadas por função, temporização e percentagem do tempo total, com dois contadores de eventos de hardware nas colunas mais à direita e a linha de totais abaixo.

A janela é uma tabela ordenável de funções com as respetivas contagens de chamadas, microssegundos mínimos, máximos, totais e médios, ciclos médios e percentagem do tempo total, com uma linha de totais abaixo e uma caixa de filtro para localizar funções por nome. Os nomes das funções provêm do ficheiro ELF do firmware – aponte o campo de caminho do firmware na janela para o .elf produzido pela compilação, e os endereços são resolvidos em nomes.

Dois controlos de vista organizam os dados. Flat classifica cada função de forma independente – a vista para «qual é a função mais cara». Tree aninha os chamados sob os chamadores, mostrando como o tempo se decompõe ao longo da cadeia de chamadas. Independentemente, Inclusive atribui a uma função o tempo gasto em tudo o que ela chamou, enquanto Exclusive conta apenas o corpo da própria função – inclusive encontra o subsistema dispendioso, exclusive encontra o ciclo dispendioso. Reset zera os contadores, que é a forma de medir uma etapa de um pipeline isoladamente: resetar, deixar executar, ler.

O profiler também pode apresentar contadores de eventos de hardware – falhas de cache, previsões erradas de desvios e outros eventos que o processador pode contar – ao lado das colunas de temporização; selecione-os na mesma janela num firmware compilado com suporte para tal.

Veja também

O CLI do pacote openmv pode sobrepor os mesmos dados de profiling num stream em tempo real a partir da linha de comandos – consulte A CLI openmv.