2016-04-12 9 views
5

Ho letto questo su e giù: http://nim-lang.org/docs/times.htmlCome confrontare alcune righe di codice in nim?

Ma ancora non riesco a capire la cosa semplice: come ottenere il tempo in ms per due volte, una volta prima il mio codice, e di nuovo dopo il mio codice viene eseguito, e quindi stampare la differenza?

Ho provato il loro esempio:

var t0 = cpuTime() 
sleep(300) 
echo "CPU time [s] ", cpuTime() - t0 

Ma questo stamperà qualcosa senza senso:

CPU time [s] 4.200000000000005e-05 

risposta

8

Se si prevede di eseguire un sacco di misurazioni, l'approccio migliore è quello di creare un modello di supporto riutilizzabile, astraendo il codice tempistica:

import times, os, strutils 

template benchmark(benchmarkName: string, code: stmt) = 
    let t0 = epochTime() 
    code 
    let elapsed = epochTime() - t0 
    let elapsedStr = elapsed.formatFloat(format = ffDecimal, precision = 3) 
    echo "CPU Time [", benchmarkName, "] ", elapsedStr, "s" 

benchmark "my benchmark": 
    sleep 300 

Questo stamperà

CPU Time [my benchmark] 0.305s 

Se avete bisogno di dati più completi sulle prestazioni di tutto il codice incluso nel vostro progetto, Nim offre una modalità di compilazione speciale, che funge da codice compilato con sonde di profilazione. È possibile trovare maggiori informazioni qui:

http://nim-lang.org/docs/estp.html

Infine, dal momento che Nim genera codice C con i nomi delle funzioni C che corrispondono direttamente alle loro controparti Nim, è possibile utilizzare qualsiasi profiler C con i programmi di Nim.

+0

Ey, non conoscevo questo profilo. Nim è pieno di segreti. – Arrrrrrr

2

cpuTime calcola solo il tempo la CPU spende in realtà sul processo, almeno su Linux. Quindi l'intero periodo di sonno non conta. È invece possibile utilizzare epochTime, che è il timestamp UNIX effettivo con accuratezza di secondo grado.