2016-04-12 11 views
5

czytam ten dół i do góry: http://nim-lang.org/docs/times.htmlJak przetestować kilka linii kodu w nim?

Ale nadal nie mogę zrozumieć prostą rzecz: Jak uzyskać czas w ms dwa razy, raz przed moim kodu, i znowu po moim kod jest uruchamiany, a następnie wydrukować różnicę?

Próbowałem ich przykładem:

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

Ale to drukuje coś bezsensownego:

CPU time [s] 4.200000000000005e-05 

Odpowiedz

8

Jeśli planujesz wykonać wiele pomiarów, najlepszym rozwiązaniem jest stworzenie wielokrotnego użytku szablon pomocniczy, abstrahując dala kod czasowy:

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 

To będzie wydrukować

CPU Time [my benchmark] 0.305s 

Jeśli potrzebujesz bardziej obszernych danych na temat wydajności całego kodu zawartego w projekcie, Nim oferuje specjalny tryb kompilacji, który instrumentuje skompilowany kod z sondami profilowania. Można znaleźć więcej na ten temat tutaj:

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

Wreszcie, ponieważ Nim generuje kod C z nazw funkcji C, które bezpośrednio odpowiadają ich odpowiedniki NIM, można użyć dowolnego z programów C profilera NIM.

+0

Oczy, nie znałem tego profilu. Nim jest pełen sekretów. – Arrrrrrr

2

cpuTime tylko oblicza czas CPU faktycznie spędza na proces, co najmniej na Linuksie. Więc cały czas snu się nie liczy. Zamiast tego można użyć wartości epochTime, która jest faktycznym znacznikiem czasu UNIX z dokładnością do sekundy.

Powiązane problemy