在 BenchmarkTools.jl 设置中将多个变量绑定到副本
Binding multiple variables to copies in BenchmarkTools.jl setup
我正在尝试使用 BenchmarkTools.jl
中的 @benchmarkable
宏。在 package documentaton 中,他们解释了如何将 setup
表达式传递给 @benchmark
和 @benchmarkable
。他们还解释说这可以用于 in-place/mutating 函数以绑定输入变量的副本。
但是,我不确定如何使用 setup
表达式同时复制多个变量。
例如,假设我要对以下函数进行基准测试(实际函数无关紧要):
function my_function!(x, y)
deleteat!(x, y .== 0)
deleteat!(y, y .== 0)
x .= x .* 2
end
具有以下输入:
using BenchmarkTools
a = collect(1:30)
b = rand(0:5, 30)
我想通过将 a
和 b
的副本分别绑定到变量 y
和 z
来执行基准测试。
t = @benchmarkable my_function!(m, n) setup=(m = copy($a), n = copy($b)) evals = 30
run(t)
但是运行前面的代码returns出现如下错误:
ERROR: LoadError: UndefVarError: m not defined
setup
需要一段代码,因此:
t = @benchmarkable my_function!(m, n) setup=begin; m = copy($a); n = copy($b);end evals = 30
现在你可以运行了:
julia> run(t)
BenchmarkTools.Trial: 10000 samples with 30 evaluations.
Range (min … max): 173.333 ns … 131.320 μs ┊ GC (min … max): 0.00% … 99.33%
Time (median): 210.000 ns ┊ GC (median): 0.00%
Time (mean ± σ): 251.470 ns ± 1.315 μs ┊ GC (mean ± σ): 5.19% ± 0.99%
▂█ ▁
██▇█▅▇█▅▆▃▃▃▃▃▃▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▁▂▁▁▁▂▁▂▂▂▂▂▂▂▂▂▂▂▂▂▁▂▂▂▂▂▂ ▃
173 ns Histogram: frequency by time 807 ns <
我正在尝试使用 BenchmarkTools.jl
中的 @benchmarkable
宏。在 package documentaton 中,他们解释了如何将 setup
表达式传递给 @benchmark
和 @benchmarkable
。他们还解释说这可以用于 in-place/mutating 函数以绑定输入变量的副本。
但是,我不确定如何使用 setup
表达式同时复制多个变量。
例如,假设我要对以下函数进行基准测试(实际函数无关紧要):
function my_function!(x, y)
deleteat!(x, y .== 0)
deleteat!(y, y .== 0)
x .= x .* 2
end
具有以下输入:
using BenchmarkTools
a = collect(1:30)
b = rand(0:5, 30)
我想通过将 a
和 b
的副本分别绑定到变量 y
和 z
来执行基准测试。
t = @benchmarkable my_function!(m, n) setup=(m = copy($a), n = copy($b)) evals = 30
run(t)
但是运行前面的代码returns出现如下错误:
ERROR: LoadError: UndefVarError: m not defined
setup
需要一段代码,因此:
t = @benchmarkable my_function!(m, n) setup=begin; m = copy($a); n = copy($b);end evals = 30
现在你可以运行了:
julia> run(t)
BenchmarkTools.Trial: 10000 samples with 30 evaluations.
Range (min … max): 173.333 ns … 131.320 μs ┊ GC (min … max): 0.00% … 99.33%
Time (median): 210.000 ns ┊ GC (median): 0.00%
Time (mean ± σ): 251.470 ns ± 1.315 μs ┊ GC (mean ± σ): 5.19% ± 0.99%
▂█ ▁
██▇█▅▇█▅▆▃▃▃▃▃▃▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▁▂▁▁▁▂▁▂▂▂▂▂▂▂▂▂▂▂▂▂▁▂▂▂▂▂▂ ▃
173 ns Histogram: frequency by time 807 ns <