Quando si profila una funzione per l'uso a tempo, quali informazioni sono desiderabili?

7

Sto scrivendo un programma simile al modulo timeit di Python. L'idea è di cronometrare una funzione eseguendola ovunque da 10 a 100.000 volte a seconda del tempo necessario e quindi di riportare i risultati.

Ho letto che il numero più importante è il tempo di esecuzione minimo perché questo è il numero che meglio riflette la velocità con cui la macchina può eseguire il codice in questione in assenza di altri programmi in competizione per il tempo e la memoria del processore. Questa argomentazione ha senso per me.

Saresti felice con questo?

Vorresti sapere il tempo medio o la deviazione standard? C'è qualche altra misura che consideri più importante?

    
posta aaronasterling 30.12.2010 - 04:27
fonte

2 risposte

3

La prima domanda è: la tua funzione fa sempre la stessa difficoltà di calcolo? O alcuni input sono intrinsecamente più difficili di altri? Quindi ciò che conta dipende dall'ambiente in cui deve essere utilizzato. Se si tratta di un'applicazione in tempo reale, potrebbe esserci un limite superiore difficile in un tempo di esecuzione accettabile. Per la maggior parte degli scopi il tempo medio di esecuzione sarebbe rilevante. Si noti che anche per una macchina non caricata -say si esegue solo un singolo thread, anche i processi che hanno la stessa complessità compositiva formale (e persino eseguono esattamente le stesse istruzioni), potrebbero avere tempi di esecuzione notevolmente diversi, a seconda dello stato preesistente della memoria cache, dello stato del TLB, ecc. Le prestazioni delle macchine moderne non sono affatto semplici. Anche il tempo di esecuzione di un blocco di codice non è più una buona metrica. Per ogni porzione di codice che viene eseguita, lo stato della cache, il TLB, ecc. Sono alterati, quindi la velocità di esecuzione di qualsiasi processo segue, dipende in modo non banale da quanto accaduto prima.

    
risposta data 30.12.2010 - 05:00
fonte
2

Hai sicuramente bisogno di più di un singolo valore restituito.

Vedrei Mean, Min, Max e Standard Deviation come minimo per utilizzare le informazioni in modo statisticamente significativo.

Ci sono un sacco di problemi che possono influenzare le prestazioni che hanno scostamenti anche su una "macchina pulita", ancora di più ora che ci stiamo muovendo in un mondo con un'elaborazione sempre più parallela e tutte le complessità con la pianificazione, ecc. .

    
risposta data 30.12.2010 - 04:50
fonte

Leggi altre domande sui tag