如何在nim中对几行代码进行基准测试?

exe*_*ook 6 nim-lang

我向下看了这个:http://nim-lang.org/docs/times.html

但仍然无法想象简单的事情:如何在ms中获取两次时间,一次在我的代码之前,在我的代码运行之后再次,然后打印差异?

我试过他们的例子:

var t0 = cpuTime()
sleep(300)
echo "CPU time [s] ", cpuTime() - t0
Run Code Online (Sandbox Code Playgroud)

但是这会打印出毫无意义的东西

CPU time [s] 4.200000000000005e-05
Run Code Online (Sandbox Code Playgroud)

zah*_*zah 11

如果您计划执行大量测量,最好的方法是创建一个可重复使用的帮助器模板,抽象出时序代码:

import times, os, strutils

template benchmark(benchmarkName: string, code: untyped) =
  block:
    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
Run Code Online (Sandbox Code Playgroud)

这将打印出来

CPU Time [my benchmark] 0.305s
Run Code Online (Sandbox Code Playgroud)

如果您需要有关项目中包含的所有代码性能的更全面的数据,Nim提供了一种特殊的构建模式,它使用分析探针来监控已编译的代码.你可以在这里找到更多相关信息:

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

最后,由于Nim生成的C代码具有与其Nim对应项直接对应的C函数名,因此可以将任何C profiler与Nim程序一起使用.


def*_*ef- 5

cpuTime只计算CPU实际花费在进程上的时间,至少在Linux上是这样。所以整个睡眠时间不算在内。您可以改用epochTime亚秒级精度的实际 UNIX 时间戳。