UMFpackLU backslash operator involving multiple RHS

Hello,

I was experimenting with out-of-core linear solvers and found that most of my time was spent in computations of the form
F\x

where F=lufact(A), A is a sparse matrix, and x is many column vectors.

It seems a straightforward way to parallelize is over the columns of x. I would think UMFpack should have an option for this, but in Julia the result seems to be single threaded.

I see the following issue on GitHub:
https://github.com/JuliaLang/julia/issues/19500

but it’s over a year old.

Is there a workaround to get this to parallelize over the columns of x?

Thank you

Did you try something like Andreas’ example at the end of the issue you mentioned? This minimal version works
for me on Julia 0.6.2:

using Base.Threads

function unsafe_solver!(X,F::Base.SparseArrays.UMFPACK.UmfpackLU,B)
    @threads for j in 1:size(B,2)
        A_ldiv_B!(view(X,:,j), F, view(B,:,j))
    end
    X
end

(unsafe because of lack of sanity checks.)
I observe about 5x speedup for 8 threads on 8 cores.

2 Likes

Thank you this was exactly what I needed!

I did originally try this but I didn’t include using Base.Threads so it complained about my @threads macro. I am trying this now and on surface it appears to be working. The code takes a while to run, hopefully this helps!

Thank you.