2016-04-12 8 views
5

las ich diese nach oben und unten: http://nim-lang.org/docs/times.htmlWie Benchmark einige Zeilen Code in Nim?

Aber immer noch die einfachen Sache nicht verstehen kann: wie die Zeit in ms zweimal zu bekommen, einmal vor meinem Code, und wieder nach meinem Code ausgeführt wird, und dann die Differenz drucken?

habe ich versucht, ihr Beispiel:

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

Aber diese druckt etwas sinnlos:

CPU time [s] 4.200000000000005e-05 

Antwort

8

Wenn Sie eine Menge von Messungen durchführen möchten, ist der beste Ansatz ein wiederverwendbares Helfer Template zu erstellen, das Timing Code abstrahiert weg:

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 

Dieses heraus gedruckt wird

CPU Time [my benchmark] 0.305s 

Wenn Sie umfassendere Daten zur Leistung des gesamten in Ihrem Projekt enthaltenen Codes benötigen, bietet Nim einen speziellen Build-Modus, der den kompilierten Code mit Profiling-Probes instrumentiert. Sie können hier weitere Informationen finden:

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

Da schließlich Nim C-Code mit C-Funktionsnamen erzeugt, die ihren Nim Kollegen direkt entsprechen, können Sie einen beliebigen C-Profiler mit Nim-Programme verwenden.

+0

Ey, ich kannte dieses Profil nicht. Nim ist voller Geheimnisse. – Arrrrrrr

2

cpuTime berechnet nur die Zeit, die CPU auf den Prozess tatsächlich verbringt, zumindest auf Linux. Die gesamte Schlafzeit zählt also nicht. Sie können stattdessen epochTime verwenden, was der tatsächliche UNIX-Zeitstempel mit Genauigkeit unter einer Sekunde ist.