提问人:Miiao 提问时间:6/18/2023 最后编辑:Peter CordesMiiao 更新时间:6/19/2023 访问量:74
如何强制优化器在 Julia 中保留一些代码?
How to force the optimizer to keep some code in Julia?
问:
如何强制计算表达式,使其不会被优化?
@elapsed f()
返回零,因为纯函数的结果是未使用的。f
在 Rust 中,我们可以使用一个名为 的内在函数,在 Nim 中 - 编译指示,在 C 中我们可以创建一个变量,在 Zig 中 - 函数,在 Haskell 中,我们可以用来强制计算,等等。我怎样才能在朱莉娅做到这一点?black_box
used
volatile
doNotOptimizeAway
evaluate
另外,测量经过时间的正确方法实际上是什么?我个人需要一个具有纳秒级精度的单调计时器......@elapsed
答:
5赞
August
6/19/2023
#1
如果您还没有看过它,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
@elapsed
使用,因此具有纳秒精度。Base.time_ns()
评论
0赞
Miiao
6/19/2023
谢谢,两者都完美无缺donotdelete
time_ns
评论