在 Julia 中,我有一個函式,它使用@elapsed宏對 for 回圈的每次迭代進行計時,如下所示。我不想為每次迭代計時,而是想執行每個“kth”迭代100 次,并將這 100 次試驗的平均值記錄為每次迭代的“時間”,存盤在time_vector陣列中。有沒有辦法修改這個函式來完成這個?
function timeloop2(k)
time_vector = zeros(k)
for x = 1:k
#for each iteration k, do 100 trials and compute "average" of 100 trials?
#how to store each average of 100 trials in time_vector?
t = @elapsed begin
L?=rand(10,k)
L?=rand(k,10)
L?*L?
end
time_vector[x] = t
end
time_vector
end
uj5u.com熱心網友回復:
如果我理解正確,這應該適用于這種特定情況
function timeloop2(k)
time_vector = zeros(k)
for x = 1:k
t = @elapsed for j in 1:100
L?=rand(10,k)
L?=rand(k,10)
L?*L?
end
time_vector[x] = t/100
end
time_vector
end
但是,也許您會對使用BenchmarkTools進行一般基準測驗感興趣。
uj5u.com熱心網友回復:
為了獲得準確的結果,最好使用@benchmarkBenchmarkTools.jl中的內容。的輸出@benchmark將包含很多資訊,如allocs, gctimes, memory, params, times; 您在這里感興趣的是times向量的平均值。因此,計算mean(t.times)和除以10^9將在幾秒鐘內給出正確的結果。
請注意,@benchmark它將自動運行代碼多次,以實作準確計時。但也要注意,我們應該插入變數,$k以避免處理導致不準確結果的全域變數。
using BenchmarkTools
function timeloop2(k)
time_vector = zeros(k)
for x = 1:k
t = @benchmark begin
L? = rand(10, $k)
L? = rand($k, 10)
L? * L?
end
time_vector[x] = mean(t.times)/10^9
end
time_vector
end
例子:
timeloop2(9)
9-element Vector{Float64}:
7.992059027777779e-7
8.008377931034483e-7
8.042304827586206e-7
7.996186206896552e-7
8.017322068965517e-7
7.996148275862069e-7
7.990756551724139e-7
8.239104999999999e-7
8.269181679389314e-7
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/505172.html
