using BenchmarkTools
Julia 함수를 벤치마킹하는 데 권장되는 방법입니다. 꽤 오랜 시간이 걸리는 경우를 제외하고는 그 중에서 내 보낸 @benchmark
덜 자세한 @btime
매크로를 사용하십시오. 이 매크로 뒤의 기계는 대상 기능을 여러 번 평가하기 때문에 @time
느리게 실행되는 항목을 벤치마킹하는 데 유용합니다 (예 : 디스크 액세스 또는 시간이 많이 걸리는 계산이 관련된 경우).
사용하는 것이 중요하다 @btime
또는 @benchmark
제대로,이 피합니다 결과를 오해의 소지가. 일반적으로 하나 이상의 인수를 취하는 함수를 벤치마킹하고 있습니다. 벤치마킹 할 때 모든 인수는 외부 변수 여야합니다 (벤치 마크 매크로 제외).
x = 1
f(x)
# do not use f(1)
기능은 여러 번 평가됩니다. 함수가 평가 될 때마다 함수 인수가 다시 평가되지 않도록하려면 인수로 사용되는 $
각 변수의 이름 앞에 a 를 붙여 각 인수를 표시해야합니다 . 벤치마킹 매크로는이를 사용하여 벤치마킹 프로세스가 시작될 때 변수가 한 번 평가 (해결)되고 결과는 그대로 그대로 재사용됨을 나타냅니다.
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
조정할 수있는 것보다 매개 변수가 있지만 일반적으로 기본값이 잘 작동합니다. 숙련 된 urser 용 BenchmarkTools에 대한 자세한 내용 은 설명서를 참조하십시오 .
@btime
그리고@belapsed
단지 최소한의 시간을 반환합니다.