Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

BigFloat QR leads to ERROR: cannot resize array with shared data #823

Open
dlfivefifty opened this issue Mar 19, 2021 · 1 comment
Open

Comments

@dlfivefifty
Copy link
Contributor

This is a bit surprising:

julia> A = BigFloat.(randn(5,5)); b = BigFloat.(randn(5));

julia> resize!(qr(A) \ b, 3)
ERROR: cannot resize array with shared data
Stacktrace:
 [1] _deleteend!
   @ ./array.jl:893 [inlined]
 [2] resize!(a::Vector{BigFloat}, nl::Int64)
   @ Base ./array.jl:1109
 [3] top-level scope
   @ REPL[9]:1

I tried to debug, the culprit seems to be somewhere in the orthogonal lmul!:

https://github.com/JuliaLang/julia/blob/efad4e3134540c7a45d385b047f145cb0da6d385/stdlib/LinearAlgebra/src/qr.jl#L634

But nothing stands out...

@MikaelSlevinsky
Copy link

A workaround is to copy the output

ulia> A = BigFloat.(randn(5,5)); b = BigFloat.(randn(5));

julia> resize!(copy(qr(A) \ b), 3)
3-element Array{BigFloat,1}:
 1.128343225039452563013632216725243690076281918797619929418640609900994969010822
 0.3046898873582031740087773316219913340227916402714182242361382185620764253197802
 0.9309977144595598360049286776484760070368732518629144855630406146909686632942985

I could be wrong, but I think this is because the output vector is shared with a temporary vector in the QR factorization (maybe a Householder reflector?) that doesn't get cleared before its use in the solve phase. Copying the output places a memory barrier between it and a temporary array. (Not saying this is ideal.)

Note that lu works fine (perhaps because it implements elementary row operations in-place, i.e. without any temporary storage.)

julia> resize!(lu(A) \ b, 3)
3-element Array{BigFloat,1}:
 1.128343225039452563013632216725243690076281918797619929418640609900994969010788
 0.3046898873582031740087773316219913340227916402714182242361382185620764253198018
 0.9309977144595598360049286776484760070368732518629144855630406146909686632942726

@KristofferC KristofferC transferred this issue from JuliaLang/julia Nov 26, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants