2

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になると思います。したがって、反復回数に関連する追加のメモリ割り当てはありません。

4

0 に答える 0