using BenchmarkTools
जूलिया कार्यों को बेंचमार्क करने के लिए अनुशंसित तरीका है। जब तक आप किसी ऐसी चीज को टाइम नहीं कर रहे हैं, जो कि काफी समय लेती है, @benchmark
या तो या उससे कम वर्बोज़ @btime
मैक्रोज़ का उपयोग करें । क्योंकि इन मैक्रो के पीछे की मशीनरी कई बार लक्ष्य फ़ंक्शन का मूल्यांकन करती है, @time
बेंचमार्किंग चीजों के लिए उपयोगी है जो धीरे-धीरे चलती हैं (जैसे कि डिस्क एक्सेस या बहुत समय लेने वाली गणना शामिल हैं)।
इसका उपयोग @btime
या @benchmark
सही तरीके से करना महत्वपूर्ण है, यह भ्रामक परिणामों से बचा जाता है। आमतौर पर, आप एक फ़ंक्शन को बेंचमार्क कर रहे हैं जो एक या अधिक तर्क लेता है। बेंचमार्किंग करते समय, सभी तर्क बाहरी चर होने चाहिए: (बेंचमार्क मैक्रो के बिना)
x = 1
f(x)
# do not use f(1)
फ़ंक्शन का मूल्यांकन कई बार किया जाएगा। जब भी फ़ंक्शन का मूल्यांकन किया जाता है, तब फ़ंक्शन तर्कों को फिर से मूल्यांकन करने से रोकने के लिए, हमें प्रत्येक तर्क $
को प्रत्येक चर के नाम से प्रीफ़िक्स करके एक तर्क के रूप में उपयोग किया जाता है। बेंचमार्किंग मैक्रोज़ इसका उपयोग यह इंगित करने के लिए करते हैं कि बेंचमार्किंग प्रक्रिया की शुरुआत में चर का मूल्यांकन (हल) एक बार किया जाना चाहिए, और फिर इसका परिणाम सीधे रूप में उपयोग किया जाना है:
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
जबकि पैरामीटर समायोजित किए जा सकते हैं, डिफ़ॉल्ट मान आमतौर पर अच्छी तरह से काम करते हैं। अनुभवी ursers के लिए बेंचमार्कटल्स के बारे में अतिरिक्त जानकारी के लिए, मैनुअल देखें ।
@btime
और@belapsed
केवल न्यूनतम समय वापस करें।