Mii*_*iao 5 benchmarking microbenchmark julia
如何强制计算表达式,使其不会被优化?
@elapsed f()
返回零,因为纯函数的结果f
未被使用。
在 Rust 中,我们可以使用一个名为 的内在函数black_box
,在 Nim - used
pragma 中,在 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()
,因此具有纳秒精度。