Julia 1.5.0 を使用しています。次のコードを検討してください。
using LinearAlgebra
using Distributions
using BenchmarkTools
function solve_b!(A, tol_iters)
b = [1.0 2.0]'
luA = lu!(A)
x = [0.0; 0.0]
for i =1:tol_iters
A[1,1] += 0.001
A[2,2] += 0.001
luA = lu!(A)
ldiv!(x, luA, b)
end
end
A = rand(2,2)
solve_b!(A, 1000)
これを で実行するとjulia --track-allocation=user
、ほとんどのメモリ割り当てがb = [1.0 2.0]'
およびから来ていることがわかりx = [0.0; 0.0]
ます。つまり、.mem ファイルを見ると、次のように表示されます。
96 b = [1.0 2.0]' 0 luA = lu!(A) 96 x = [0.0; 0.0]
I を増やすと、メモリ割り当てが増加しtol_iters
ます。誰かが理由を説明できますか?私は and を使用lu!
してldiv!
いるので、更新はin-placeになると思います。したがって、反復回数に関連する追加のメモリ割り当てはありません。