Skip to content

Commit 8e3ce1a

Browse files
Update extension_algs.jl
1 parent 2819d80 commit 8e3ce1a

File tree

1 file changed

+35
-0
lines changed

1 file changed

+35
-0
lines changed

src/extension_algs.jl

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -439,3 +439,38 @@ A wrapper over Apple's Metal GPU library. Direct calls to Metal in a way that pr
439439
to avoid allocations and automatically offloads to the GPU.
440440
"""
441441
struct MetalLUFactorization <: AbstractFactorization end
442+
443+
## CUSOLVERRFFactorization
444+
445+
"""
446+
`CUSOLVERRFFactorization(; symbolic = :RF, reuse_symbolic = true)`
447+
448+
A GPU-accelerated sparse LU factorization using NVIDIA's cusolverRF library.
449+
This solver is specifically designed for sparse matrices on CUDA GPUs and
450+
provides high-performance factorization and solve capabilities.
451+
452+
## Keyword Arguments
453+
454+
- `symbolic`: The symbolic factorization method to use. Options are:
455+
- `:RF` (default): Use cusolverRF's built-in symbolic analysis
456+
- `:KLU`: Use KLU for symbolic analysis
457+
- `reuse_symbolic`: Whether to reuse the symbolic factorization when the
458+
sparsity pattern doesn't change (default: `true`)
459+
460+
!!! note
461+
This solver requires CUSOLVERRF.jl to be loaded and only supports
462+
`Float64` element types with `Int32` indices.
463+
"""
464+
struct CUSOLVERRFFactorization <: AbstractSparseFactorization
465+
symbolic::Symbol = :RF
466+
reuse_symbolic::Bool = true
467+
468+
function CUSOLVERRFFactorization(; symbolic::Symbol = :RF, reuse_symbolic::Bool = true)
469+
ext = Base.get_extension(@__MODULE__, :CUSOLVERRFFactorization)
470+
if ext === nothing
471+
error("CUSOLVERRFFactorization requires that CUSOLVERRF.jl is loaded, i.e. `using CUSOLVERRF`")
472+
else
473+
return new{}(symbolic, reuse_symbolic)
474+
end
475+
end
476+
end

0 commit comments

Comments
 (0)