Mii*_*iao 5 benchmarking microbenchmark julia
如何强制计算表达式,使其不会被优化?
@elapsed f()返回零,因为纯函数的结果f未被使用。
在 Rust 中,我们可以使用一个名为 的内在函数black_box,在 Nim - usedpragma 中,在 C 中我们可以创建一个volatile变量,在 Zig -doNotOptimizeAway函数中,在 Haskell 中我们可以使用它evaluate来强制求值,等等。我怎样才能在朱莉娅做到这一点?
另外,@elapsed实际上是测量经过时间的正确方法吗?我个人需要一个具有纳秒精度的单调计时器......
如果您还没有看到过,BenchmarkTools.jl可能就是您正在寻找的。
Base.donotdelete将阻止死代码消除(但不会停止f()优化为常量,如果可能的话)。
f() = maximum(i^2 for i = 1:1000000000)
timeit1() = @elapsed f()
timeit2() = @elapsed Base.donotdelete(f())
timeit1() # 0.0
timeit2() # 0.36 ish
Run Code Online (Sandbox Code Playgroud)
@elapsed使用Base.time_ns(),因此具有纳秒精度。