Misurazione della prestazione del codice
Panoramica sulle funzioni di temporizzazione delle prestazioni
La funzione timeit e le funzioni del cronometro tic e toc, consentono di misurare il tempo necessario per l'esecuzione del codice. Utilizzare la funzione timeit per una misurazione rigorosa del tempo di esecuzione della funzione. Utilizzare tic e toc per stimare il tempo necessario per porzioni di codice più piccole che non sono funzioni complete.
Per ulteriori dettagli sulla prestazione del codice, come le informazioni sulle chiamate di funzione e il tempo di esecuzione delle singole righe di codice, utilizzare MATLAB® Profiler. Per maggiori informazioni, vedere Profile Your Code to Improve Performance.
Funzioni temporali
Per misurare il tempo necessario per eseguire una funzione, utilizzare la funzione timeit. La funzione timeit chiama più volte la funzione specificata e restituisce la mediana delle misurazioni. Richiede un handle alla funzione da misurare e restituisce il tempo di esecuzione tipico, espresso in secondi. Si supponga di aver definito una funzione computeFunction, che accetta due input x e y, definiti nel workspace. È possibile calcolare il tempo necessario per eseguire la funzione utilizzando timeit.
f = @() myComputeFunction(x,y); % handle to function
timeit(f)Porzioni temporali di codice
Per stimare il tempo necessario all'esecuzione di una parte del programma o per confrontare la velocità di diverse implementazioni di parti del programma, utilizzare le funzioni del cronometro tic e toc. Invocando tic si avvia il timer, mentre il successivo toc legge il tempo trascorso.
tic
% The program section to time.
tocA volte i programmi vengono eseguiti troppo velocemente perché tic e toc possano fornire dati utili. Se il codice è più veloce di 1/10 di secondo, si consiglia di misurarlo in un loop e di calcolare poi la media per trovare il tempo di una singola esecuzione.
La funzione cputime rispetto a tic/toc e timeit
Si consiglia di utilizzare timeit o tic e toc per misurare la prestazione del codice. Queste funzioni restituiscono il tempo reale. A differenza di tic e toc, la funzione timeit chiama il codice più volte e tiene pertanto conto dei costi iniziali.
La funzione cputime misura il tempo totale della CPU e somma il tempo su tutti i thread. Questa misurazione è diversa dal tempo reale restituito da timeit o tic/toc e potrebbe risultare fuorviante. Ad esempio:
Il tempo della CPU per la funzione
pauseè generalmente breve, ma il tempo reale considera il tempo effettivo in cui l'esecuzione di MATLAB è sospesa. Pertanto, il tempo reale potrebbe essere più lungo.Se la funzione utilizza in modo uniforme quattro basi di elaborazione, il tempo della CPU potrebbe essere circa quattro volte superiore al tempo reale.
Suggerimenti per la misurazione della prestazione
Quando si misurano le prestazioni del codice, tenere presenti i seguenti suggerimenti:
Misurare il tempo di una porzione di codice sufficientemente significativa. Idealmente, il codice che si sta cronometrando dovrebbe richiedere più di 1/10 di secondo per essere eseguito.
Inserire il codice che si desidera cronometrare in una funzione invece di cronometrarlo dalla riga di comando o all'interno di uno script.
A meno che non si stia cercando di misurare il costo iniziale, eseguire il codice più volte. Utilizzare la funzione
timeit.Evitare
clear alldurante la misurazione della prestazione. Per maggiori informazioni, vedere la funzioneclear.Assegnare l'output a una variabile invece di lasciarlo impostato su
ansper impostazione predefinita.