using BenchmarkTools
adalah cara yang disarankan untuk membandingkan fungsi Julia. Kecuali jika Anda menghitung waktu yang cukup lama, gunakan salah satu @benchmark
atau kurang @btime
makro yang diekspor darinya. Karena mesin di balik makro ini mengevaluasi fungsi target berkali-kali, @time
berguna untuk membuat tolok ukur hal-hal yang berjalan lambat (mis. Di mana akses disk atau kalkulasi yang sangat memakan waktu terlibat).
Penting untuk menggunakan @btime
atau @benchmark
dengan benar, ini menghindari hasil yang menyesatkan. Biasanya, Anda membuat tolok ukur fungsi yang membutuhkan satu atau beberapa argumen. Saat membuat tolok ukur, semua argumen harus berupa variabel eksternal: (tanpa makro tolok ukur)
x = 1
f(x)
# do not use f(1)
Fungsi akan dievaluasi berkali-kali. Untuk mencegah argumen fungsi dievaluasi ulang setiap kali fungsi dievaluasi, kita harus menandai setiap argumen dengan mengawali a $
ke nama setiap variabel yang digunakan sebagai argumen. Makro pembandingan menggunakan ini untuk menunjukkan bahwa variabel harus dievaluasi (diselesaikan) satu kali, pada awal proses pembandingan dan kemudian hasilnya akan digunakan kembali secara langsung seperti:
julia> using BenchmarkTools
julia> a = 1/2;
julia> b = 1/4;
julia> c = 1/8;
julia> a, b, c
(0.5, 0.25, 0.125)
julia> function sum_cosines(x, y, z)
return cos(x) + cos(y) + cos(z)
end;
julia> @btime sum_cosines($a, $b, $c); # the `;` suppresses printing the returned value
11.899 ns (0 allocations: 0 bytes) # calling the function takes ~12 ns (nanoseconds)
# the function does not allocate any memory
# if we omit the '$', what we see is misleading
julia> @btime sum_cosines(a, b, c); # the function appears more than twice slower
28.441 ns (1 allocation: 16 bytes) # the function appears to be allocating memory
# @benchmark can be used the same way that @btime is used
julia> @benchmark sum_cosines($a,$b,$c) # do not use a ';' here
BenchmarkTools.Trial:
memory estimate: 0 bytes
allocs estimate: 0
--------------
minimum time: 12.111 ns (0.00% GC)
median time: 12.213 ns (0.00% GC)
mean time: 12.500 ns (0.00% GC)
maximum time: 39.741 ns (0.00% GC)
--------------
samples: 1500
evals/sample: 999
Meskipun ada parameter yang dapat disesuaikan, nilai-nilai default biasanya berfungsi dengan baik. Untuk informasi tambahan tentang BenchmarkTools untuk urser berpengalaman, lihat manual .
@btime
dan@belapsed
hanya mengembalikan waktu minimum.