Skip to content

LinearSolve + Krylove + CUDA #341

@ASLabadi

Description

@ASLabadi

Hi guys,
i understood from the documentation that I can use LinearSolve with Krylov in both CPU and GPU.
i am trying to solve a sparse linear system Ax=b as the following:

Pl_cpu = ilu(A_cpu) # the preconditioner
prob_cpu = LinearProblem(A_cpu, b_cpu)
sol = solve(prob_cpu, KrylovJL_MINRES(rtol=1e-8),Pl =Pl_cpu, maxiters =200, verbose = true, log = true);

This version works super fine.

But when I try to perform it on the GPU, I convert A, b to CuSparseMatrixCSC.

P_gpul=ilu02(A_gpu)
prob_gpu=LinearProblem(A_gpu, b_gpu)
sol = solve(prob_gpu, KrylovJL_MINRES(rtol=1e-8),Pl =Pl_gpu, maxiters =200, verbose = true, log = true);

I get an error:

ERROR: MethodError: no method matching ldiv!(::CuSparseMatrixCSR{Float64, Int32}, ::CuArray{Float64, 1, CUDA.Mem.DeviceBuffer})

Closest candidates are:
ldiv!(::AbstractVecOrMat, ::AbstractVecOrMat, ::SciMLOperators.AbstractSciMLOperator)
@ SciMLOperators C:\Users\ahmad.julia\packages\SciMLOperators\M8FAe\src\left.jl:27
ldiv!(::Any, ::Sparspak.SpkSparseSolver.SparseSolver{IT, FT}, ::Any) where {IT, FT}
@ Sparspak C:\Users\ahmad.julia\packages\Sparspak\oqBYl\src\SparseCSCInterface\SparseCSCInterface.jl:263
ldiv!(::Any, ::ChainRulesCore.AbstractThunk)
@ ChainRulesCore C:\Users\ahmad.julia\packages\ChainRulesCore\0t04l\src\tangent_types\thunks.jl:95
...

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions