Contenuto principale

Profilazione del codice per un miglioramento delle prestazioni

Che cos'è la profilazione?

La profilazione è un modo per misurare il tempo necessario per eseguire il codice e identificare dove MATLAB® impiega più tempo. Dopo aver identificato quali funzioni richiedono più tempo, è possibile valutarle per individuare possibili miglioramenti delle prestazioni. È inoltre possibile profilare il codice per determinare quali righe di codice non vengono eseguite. Determinare quali righe di codice non vengono eseguite risulta utile quando si sviluppano test per il codice o come strumento di debug per isolare un problema nel codice.

È possibile profilare il codice in modo interattivo utilizzando MATLAB Profiler o in modo programmatico utilizzando la funzione profile. Per ulteriori informazioni sulla profilazione del codice in modo programmatico, vedere profile. Se si sta effettuando la profilazione di codice che viene eseguito in parallelo, per ottenere risultati ottimali utilizzare il Profiler parallelo Parallel Computing Toolbox™. Per maggiori informazioni, consultare Profiling Parallel Code (Parallel Computing Toolbox).

Suggerimento

Il codice ottimizzato prematuramente può risultare inutilmente complesso senza fornire un vantaggio significativo in termini di prestazioni. Fare in modo che la prima implementazione sia il più semplice possibile. Successivamente, se la velocità costituisce un problema, effettuare la profilazione per identificare i colli di bottiglia.

Profilazione del codice

Per profilare il codice e ottenere un miglioramento delle prestazioni, utilizzare questa procedura generale:

  1. Eseguire il Profiler sul codice.

  2. Esaminare i risultati del riepilogo del profilo.

  3. Analizzare le funzioni e le singole righe di codice.

    Ad esempio, si potrebbe voler analizzare le funzioni e le righe di codice che utilizzano molto tempo o che vengono chiamate più frequentemente.

  4. Salvare i risultati della profilazione.

  5. Implementare potenziali miglioramenti delle prestazioni nel codice.

    Ad esempio, se all'interno di un loop è presente una dichiarazione load, si potrebbe spostare la dichiarazione load all'esterno del loop in modo che venga chiamata una sola volta.

  6. Salvare i file ed eseguire clear all. Eseguire nuovamente il Profiler e confrontare i risultati con quelli originali.

  7. Ripetere i passaggi precedenti per continuare a migliorare le prestazioni del codice. Quando il codice impiega la maggior parte del tempo per richiamare poche funzioni integrate, probabilmente il codice è stato ottimizzato al massimo.

Esecuzione del Profiler sul codice

Per eseguire il Profiler su una riga di codice:

  1. Apri il Profiler andando alla scheda Apps e, sotto MATLAB, facendo clic sull'icona dell'app Profiler. È anche possibile digitare profile viewer nella finestra di comando.

  2. Andare alla scheda Profiler e, nella sezione Profile, inserire il codice che si desidera profilare nella casella di modifica.

    Ad esempio, creare una funzione solvelotka.m che individui i picchi della popolazione di prede e predatori per l'esempio di Lotka-Volterra fornito con MATLAB:

    function [preypeaks,predatorpeaks] = solvelotka(t0, tfinal, y0)
        [~,y] = ode23(@lotka,[t0 tfinal],y0);
        
        preypeaks = calculatepeaks(y(:,1));
        predatorpeaks = calculatepeaks(y(:,2));
        
    end
    
    function peaks = calculatepeaks(A)
        [TF,P] = islocalmax(A);
        peaks = P(TF);
    end
    Inserire questa dichiarazione nella casella di modifica per profilare la funzione solvelotka:
    [preypeaks,predatorpeaks] = solvelotka(0,15,[20;20])

    Se in precedenza la dichiarazione è stata profilata nella sessione attuale di MATLAB, è possibile anche selezionarla dall'elenco a discesa della casella di modifica.

  3. Fare clic su Run and Time.

    Una volta completata la profilazione, il Profiler visualizza i risultati nel riepilogo del profilo. Le dichiarazioni che sono state profilate vengono inoltre visualizzate come eseguite nella finestra di comando.

Per profilare un file di codice aperto nell'Editor, nella scheda Editor, nella sezione Run, selezionare Run > Run and Time. Il Profiler profila il file di codice aperto nella scheda attuale dell'Editor e visualizza i risultati nel riepilogo del profilo.

Esame dei risultati del riepilogo del profilo

Dopo aver eseguito il Profiler sul codice, il riepilogo del profilo presenta statistiche relative all'esecuzione complessiva del codice e fornisce statistiche di riepilogo per ciascuna funzione chiamata. Ad esempio, l'immagine sottostante mostra il riepilogo del profilo per la funzione solvelotka.

Profiler window with the Profile Summary showing a flame graph of the solvelotka function and a table showing the run times for each function called

Nella parte superiore dei risultati del riepilogo del profilo, un grafico a fiamma mostra una rappresentazione visiva del tempo impiegato da MATLAB per l'esecuzione del codice. Ogni funzione eseguita è rappresentata da una barra nel grafico a fiamma. Le funzioni definite dall'utente sono visualizzate in blu, mentre le funzioni di MathWorks® sono visualizzate in grigio.

Le funzioni nel grafico vengono visualizzate in ordine gerarchico, con le funzioni principali che appaiono nella parte inferiore del grafico e le funzioni secondarie nella parte superiore. La barra che si estende lungo tutta la parte inferiore del grafico, etichettata Profile Summary, rappresenta tutto il codice che è stato eseguito. La larghezza di una barra nel grafico rappresenta il tempo impiegato dalla funzione per essere eseguita, espresso come percentuale del tempo totale di esecuzione.

Per visualizzare i valori effettivi della percentuale e del tempo, oltre al nome completo della funzione, portare il cursore sopra la barra nel grafico. Per visualizzare informazioni dettagliate su una funzione, comprese le informazioni sulle singole righe di codice, fare clic sulla barra che rappresenta tale funzione.

Flame graph of the solvelotka function with a tooltip showing the actual percentage and time values of the solvelotka>calculatepeaks function

La tabella delle funzioni sotto il riquadro della fiamma mostra informazioni analoghe a quelle del grafico a fiamma. Inizialmente le funzioni vengono visualizzate in ordine cronologico in base al tempo impiegato per l'elaborazione. Questa tabella descrive le informazioni presenti in ciascuna colonna.

ColonnaDescrizione
Function Name

Nome della funzione chiamata dal codice profilato.

Calls

Numero di volte in cui il codice profilato ha chiamato la funzione.

Total Time

Tempo totale trascorso nella funzione, espresso in secondi. Il tempo della funzione include il tempo trascorso nelle funzioni secondarie. Il Profiler richiede un certo tempo, che è incluso nei risultati. Il tempo totale può essere pari a zero per i file il cui tempo di esecuzione è irrilevante.

Self Time

Tempo totale trascorso in una funzione, escluso il tempo trascorso in eventuali funzioni secondarie, espresso in secondi. Il tempo proprio include anche alcuni costi generali dovuti al processo di profilazione.

Total Time Plot

Rappresentazione grafica che mostra il tempo proprio rispetto al tempo totale.

Per ordinare la tabella delle funzioni in base a una colonna specifica, fare clic sulla freccia nell'intestazione della colonna. Ad esempio, fare clic sulla freccia nella colonna Function Name per ordinare le funzioni in ordine alfabetico. Inizialmente i risultati vengono visualizzati in ordine cronologico in base al Total Time. Per visualizzare informazioni dettagliate su una funzione, comprese le informazioni sulle singole righe di codice, fare clic sul nome della funzione.

Analisi delle funzioni e delle singole righe di codice

Per individuare potenziali miglioramenti nel codice, cercare nel grafico a fiamma o nella tabella delle funzioni le funzioni che utilizzano una quantità significativa di tempo o che vengono chiamate più frequentemente. Fare clic sul nome di una funzione per visualizzare informazioni dettagliate sulla funzione, comprese informazioni sulle singole righe di codice. Ad esempio, fare clic sulla funzione solvelotka>calculatepeaks. Il Profiler visualizza informazioni dettagliate sulla funzione.

Profiler window showing detailed information for the solvelotka>calculatepeaks function, including a flame graph, a table of calling functions, and a table of lines that take the longest to run

Nella parte superiore della pagina, accanto al nome della funzione attuale, il Profiler visualizza il numero di volte in cui la funzione è stata chiamata da una funzione principale e il tempo totale trascorso nella funzione. Utilizzare i collegamenti visualizzati sotto il grafico a fiamma per aprire la funzione nell'Editor predefinito o copiare i risultati visualizzati in una finestra separata.

Per tornare al riepilogo del profilo, nella scheda Profiler, fare clic sul pulsante Profile Summary. È anche possibile fare clic sulla barra Profile Summary nella parte inferiore del grafico a fiamma.

Dopo aver fatto clic su una singola funzione, il Profiler visualizza ulteriori informazioni nelle seguenti sezioni:

SezioneDettagli
Flame Graph

Grafico a fiamma che mostra una rappresentazione visiva del tempo impiegato da MATLAB per eseguire la funzione profilata. Il grafico mostra la gerarchia della funzione profilata, comprese le funzioni secondarie (visualizzate sopra la funzione attuale) e le funzioni principali (visualizzate sotto la funzione attuale). Le funzioni definite dall'utente sono visualizzate in blu (), mentre le funzioni di MathWorks sono visualizzate in grigio ().

Portare il cursore sopra la barra nel grafico per visualizzare i valori effettivi della percentuale e del tempo, oltre al nome completo della funzione. Fare clic su una barra che rappresenta una funzione per visualizzare informazioni dettagliate sulla funzione.

Parents

Elenco delle funzioni che chiamano la funzione profilata, compreso il numero di volte in cui la funzione principale ha chiamato la funzione profilata.

Fare clic sul nome di una funzione nell'elenco per visualizzare informazioni dettagliate sulla funzione.

Lines that take the most time

Elenco delle righe di codice nella funzione profilata che hanno utilizzato il massimo tempo di elaborazione.

Fare clic su una riga di codice per visualizzarla nella sezione Function Listing, nel contesto del resto del codice della funzione.

Children

Elenco di tutte le funzioni chiamate dalla funzione profilata.

Fare clic sul nome di una funzione nell'elenco per visualizzare informazioni dettagliate sulla funzione.

Code Analyzer results

Elenco dei problemi e dei potenziali miglioramenti per la funzione profilata.

Coverage results

Statistiche sulla coverage del codice relative alle righe di codice presenti nella funzione che MATLAB ha eseguito durante la profilazione.

Per eseguire ulteriori analisi della coverage del codice, vedere Collect Statement and Function Coverage Metrics for MATLAB Source Code.

Function listing

Codice sorgente della funzione, se si tratta di un file di codice MATLAB.

Per ciascuna riga di codice, Function listing include le seguenti colonne:

  • Tempo di esecuzione per ciascuna riga di codice

  • Numero di volte in cui MATLAB ha eseguito la riga di codice

  • Il numero della riga.

    Fare clic su un numero di riga in Function listing per aprire la funzione nell'Editor predefinito.

  • Il codice sorgente della funzione. Il colore del testo indica quanto segue:

    • Verde: righe commentate

    • Nero: righe di codice eseguite

    • Grigio: righe di codice non eseguite

Per impostazione predefinita, Profiler evidenzia le righe di codice con il tempo di esecuzione più lungo. Più scura è l'evidenziazione, maggiore è il tempo che ha richiesto l'esecuzione della riga di codice. Per modificare i criteri di evidenziazione, andare alla scheda Profiler e, nella sezione View, fare clic su Highlight . Selezionare una delle opzioni di evidenziazione disponibili. Ad esempio, per evidenziare le righe di codice che non sono state eseguite, selezionare l'opzione Non coverage.

Salvataggio dei risultati

Per confrontare l'impatto delle modifiche dopo aver apportato miglioramenti al codice, salvare i risultati della profilazione. Per salvare i risultati, utilizzare il collegamento visualizzato sotto il grafico a fiamma per copiare i risultati visualizzati in una finestra separata.

Flame graph of the solvelotka function and the "Copy to new window for comparing multiple runs" link underneath it, circled in red

È inoltre possibile stampare i risultati dal Profiler andando alla scheda Profiler e facendo clic sul pulsante Print.

Profilazione di più dichiarazioni nella finestra di comando

Per profilare più di una dichiarazione nella finestra di comando:

  1. Andare alla finestra di comando e digitare profile on.

  2. Inserire ed eseguire le dichiarazioni che si desidera profilare.

  3. Dopo aver eseguito tutte le dichiarazioni, digitare profile off.

  4. Aprire il Profiler digitando profile viewer. È anche possibile andare alla scheda Apps e, sotto MATLAB, fare clic sull'icona dell'app Profiler.

  5. Esaminare i risultati del riepilogo del profilo.

Profilazione di un app

È possibile profilare le app create in App Designer. È inoltre possibile profilare le app fornite con i prodotti di MathWorks, come lo strumento Filter Design and Analysis tool incluso con Signal Processing Toolbox™.

Per profilare un app:

  1. Apri il Profiler andando alla scheda Apps e, sotto MATLAB, facendo clic sull'icona dell'app Profiler. È anche possibile digitare profile viewer nella finestra di comando.

  2. Nella sezione Profile della barra degli strumenti del Profiler, fare clic su Start Profiling. Assicurarsi che non sia presente alcun codice nella casella di modifica a destra del pulsante.

  3. Avviare l'app.

  4. Utilizzare l'app.

  5. Al termine, fare clic su Stop Profiling nella barra degli strumenti del Profiler.

  6. Esaminare i risultati del riepilogo del profilo.

Nota

Per escludere il processo di avvio dell'app dalla profilazione, invertire i passaggi 2 e 3. In altre parole, avviare l'app prima di fare clic su Start Profiling.

Vedi anche

App

Funzioni

Argomenti