using BenchmarkTools
là cách được khuyến nghị để điểm chuẩn các chức năng của Julia. Trừ khi bạn định thời gian một cái gì đó mất khá nhiều thời gian, hãy sử dụng @benchmark
hoặc các @btime
macro ít dài hơn được xuất từ nó. Bởi vì máy móc đằng sau các macro này đánh giá chức năng đích nhiều lần, @time
rất hữu ích cho việc đo điểm chuẩn những thứ chạy chậm (ví dụ: khi truy cập đĩa hoặc tính toán rất tốn thời gian).
Điều quan trọng là sử dụng @btime
hoặc @benchmark
chính xác, điều này tránh kết quả sai lệch. Thông thường, bạn đang điểm chuẩn một hàm có một hoặc nhiều đối số. Khi đo điểm chuẩn, tất cả các đối số phải là biến ngoài: (không có macro điểm chuẩn)
x = 1
f(x)
# do not use f(1)
Các chức năng sẽ được đánh giá nhiều lần. Để ngăn các đối số hàm được đánh giá lại bất cứ khi nào hàm được đánh giá, chúng ta phải đánh dấu từng đối số bằng cách thêm tiền tố a $
vào tên của từng biến được sử dụng làm đối số. Các macro điểm chuẩn sử dụng điều này để chỉ ra rằng biến cần được đánh giá (giải quyết) một lần, khi bắt đầu quá trình đo điểm chuẩn và sau đó kết quả sẽ được sử dụng lại trực tiếp như sau:
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
Mặc dù có các tham số có thể được điều chỉnh, các giá trị mặc định thường hoạt động tốt. Để biết thêm thông tin về BenchmarkTools cho những người có kinh nghiệm, hãy xem hướng dẫn .
@btime
và@belapsed
chỉ trả lại thời gian tối thiểu.