Julia 設計之初就重點考慮了速度, 它的快很大程度上來源於 LLVM, JIT 以及類型設計。 Julia 有類型推斷,編譯的時候會根據不同 type 生成不同的特定代碼,叫 code
specialization,然後運行的時候會根據參數類型選擇最適合的方法,即 Multiple dispatch。
性能分析工具
沒有分析的優化都是耍流氓!
性能分析工具主要有如下幾個:
@time
@time sqrt.(rand(1000));
輸出結果:
julia> @time sqrt.(rand(1000));
0.057799 seconds (187.82 k allocations: 9.542 MiB, 9.82% gc time)
julia> @time sqrt.(rand(1000));
0.000022 seconds (8 allocations: 16.063 KiB)
這裡;是為了不輸入結果值。 因為rand(1000)返回的是一個 vector, sqrt.即可作用於 vector 中的每一個元素, 類似 numpy 中的 broadcast 吧。
function Trapezoid(f,N)
dk = 2π/(N-1)
fsum = 0
for i=1:N
k = (i-1)*dk - π
fsum += f(k)
end
fsum /= N
return fsum
end
f(x) = sin(x) + x^2
N = 400
@time fsum = daikei(f,N)
exact = ((π)^3/3 -(-π)^3/3)/(2π)
println("梯形法 $fsum, 真實值 $exact")
輸出結果
0.019191 seconds (39.88 k allocations: 2.101 MiB)
梯形法 3.3063587007826505, 真實值 3.2898681336964524
您現在可以測量在該功能上花費的時間。
沒有留言:
張貼留言