What is the current state of sparse distributed linear algebra in Julia?
I am interested in switching from C++ to Julia for finite element codes. In C PETSc seems to be the best option for sparse distributed linear algebra. I know PETSc is available as PETSc.jl, but I was curious if there is anything that uses native julia code.
I have found Julia has both Sparse and Darrays, could you have a DArray that is a distributed sparse array?
1 Like
GitHub - fverdugo/PartitionedArrays.jl: Vectors and sparse matrices partitioned into pieces for parallel distributed-memory computations. provides sparse distributed arrays compatible with native Julia iterative solvers, e.g. IterativeSolvers.jl.
(PETSc’s advantage is that it provides a lot of built-in preconditioners, and it is more mature in general, but is also a lot more constrained e.g. in the data types that it supports.)
4 Likes
The answer is yes
julia> DArray((10, 10)) do I
sprandn(map(length, I)..., 0.2)
end
10×10 DArray{Float64, 2, SparseMatrixCSC{Float64, Int64}}:
-1.52489 0.0 -0.572173 0.0 0.0 0.0 0.0 0.0848087 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.125291 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.0 -0.663207 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
1.41673 0.0 0.0 0.0 0.0 0.202435 0.0 0.0 0.0 0.0
0.0 -0.908404 0.0 0.0 0.0 0.0 0.0 0.0 1.28937 0.150807
0.0 0.331869 -0.0888742 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.21831 0.0
-2.76374 0.0 0.0 0.0 0.0 0.0 -0.419705 0.0 0.0 0.0
0.344988 0.0 -0.451797 -1.21672 0.0 0.0 0.0 0.0 1.16045 0.0
but such a matrix will often end up hitting generic fallbacks which will be extremely slow so you’d probably be better off with the package that Steve links to.