2013-07-25 16 views

risposta

14

Un modo è utilizzare il parametro della riga di comando -profile. Dopo aver eseguito il programma, verrà creato il file trace.log in cui è possibile trovare il tempo di esecuzione per ciascuna funzione. Questo naturalmente rallenterà il tuo programma in quanto il compilatore inserirà il codice di conteggio del tempo in ogni tua funzione. Questo metodo viene utilizzato per trovare la velocità relativa delle funzioni, per identificare quali ottimizzare per migliorare la velocità dell'app con il minimo sforzo.

Secondo le opzioni è la classe std.datetime.StopWatch. Vedi l'esempio nel link.

O meglio ancora adatto potrebbe essere quello di utilizzare direttamente la funzione std.datetime.benchmark.

Non dimenticare:

  1. Quando il benchmarking uso questi flag di compilazione DMD per ottenere la massima ottimizzazione -release -O -inline -noboundscheck.
  2. Mai eseguire il benchmark debug build.
  3. Assicurati di non chiamare codice libreria all'interno delle funzioni di benchmark. Dovresti eseguire il benchmark delle prestazioni dell'implementazione della libreria anziché del tuo codice.

Inoltre, è possibile utilizzare i compilatori LDC o GDC. Entrambi offrono migliori ottimizzazioni/velocità di esecuzione dell'app rispetto a DMD.

+0

Il profilo non è quello che mi serve in questo caso, ma 'std.datetime.StopWatch' è esattamente quello che stavo cercando. – clstaudt

3

Se il tuo algoritmo può essere chiamato dalla riga di comando c'è un'utile utility scritta in D che eseguirà il tuo programma un certo numero di volte e stamperà la distribuzione del tempo medio impiegato e tutti i tipi di altri numeri utili.

Si chiama avgtime ed è qui: https://github.com/jmcabo/avgtime

Problemi correlati