using BenchmarkTools
เป็นวิธีที่แนะนำให้ใช้กับฟังก์ชันมาตรฐานของ Julia หากคุณไม่ได้กำหนดเวลาสิ่งที่ใช้เวลาสักครู่ใช้อย่างใดอย่างหนึ่ง@benchmark
หรือน้อย verbose@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
ในขณะที่มีพารามิเตอร์เกินกว่าที่จะสามารถปรับได้ค่าเริ่มต้นมักจะทำงานได้ดี สำหรับข้อมูลเพิ่มเติมเกี่ยว BenchmarkTools สำหรับ ursers ประสบการณ์ดูคู่มือการใช้งาน
@btime
และ@belapsed
ส่งคืนเวลาต่ำสุดเท่านั้น