using BenchmarkTools
ist die empfohlene Methode zum Benchmarking von Julia-Funktionen. Verwenden Sie eines @benchmark
oder die weniger ausführlichen @btime
Makros, die daraus exportiert wurden, es sei denn, Sie planen etwas, das eine Weile dauert . Da die Maschinerie hinter diesen Makros die Zielfunktion viele Male auswertet, @time
ist sie nützlich für das Benchmarking von Dingen, die langsam ablaufen (z. B. wenn Festplattenzugriff oder sehr zeitaufwändige Berechnungen erforderlich sind).
Es ist wichtig zu verwenden @btime
oder @benchmark
richtig, dies vermeidet irreführende Ergebnisse. Normalerweise vergleichen Sie eine Funktion, die ein oder mehrere Argumente akzeptiert. Beim Benchmarking sollten alle Argumente externe Variablen sein: (ohne das Benchmark-Makro)
x = 1
f(x)
# do not use f(1)
Die Funktion wird viele Male ausgewertet. Um zu verhindern, dass die Funktionsargumente bei jeder Auswertung der Funktion neu ausgewertet werden, müssen wir jedes Argument markieren, indem wir $
dem Namen jeder Variablen, die als Argument verwendet wird, ein a voranstellen. Die Benchmarking-Makros verwenden dies, um anzugeben, dass die Variable zu Beginn des Benchmarking-Prozesses einmal ausgewertet (aufgelöst) werden soll und das Ergebnis dann wie folgt direkt wiederverwendet werden soll:
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
Obwohl es Parameter gibt, die angepasst werden können, funktionieren die Standardwerte normalerweise gut. Weitere Informationen zu BenchmarkTools für erfahrene Benutzer finden Sie im Handbuch .
@btime
und@belapsed
nur die Mindestzeit zurückgeben.