using BenchmarkTools
Julia işlevlerini karşılaştırmak için önerilen yoldur. Oldukça uzun süren bir şeyi zamanlamadığınız sürece, @benchmark
onlardan verilen veya daha az ayrıntılı @btime
makroları kullanın . Bu makroların arkasındaki makineler hedef işlevi birçok kez değerlendirdiğinden, @time
yavaş çalışan şeyleri karşılaştırmak için yararlıdır (örneğin, disk erişimi veya çok zaman alan hesaplamalar söz konusu olduğunda).
Kullanılması @btime
veya @benchmark
doğru kullanılması önemlidir , bu yanıltıcı sonuçları önler. Genellikle, bir veya daha fazla argüman alan bir işlevi karşılaştırırsınız. Kıyaslama yapılırken, tüm argümanlar harici değişkenler olmalıdır: (kıyaslama makrosu olmadan)
x = 1
f(x)
# do not use f(1)
Fonksiyon birçok kez değerlendirilecektir. İşlev her değerlendirildiğinde işlev bağımsız değişkenlerinin yeniden değerlendirilmesini engellemek için, bağımsız $
değişken olarak kullanılan her değişkenin adına a öneki ekleyerek her bir bağımsız değişkeni işaretlemeliyiz. Kıyaslama makroları bunu, değişkenin kıyaslama sürecinin başlangıcında bir kez değerlendirilmesini (çözülmesini) ve daha sonra sonucun doğrudan şu şekilde yeniden kullanılması gerektiğini belirtmek için kullanır:
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
Ayarlanabilecek parametreler olsa da, varsayılan değerler genellikle iyi çalışır. Deneyimli ursers için BenchmarkTools hakkında ek bilgi için, bkz manuel .
@btime
ve@belapsed
yalnızca minimum süreyi döndürün.