Performance

Time of SparseDirectSolver.jl divided by the time of cuDSS per feature and phase (BenchmarkTools medians), geometric mean over the benchmark matrices (below 1 is faster).

SparseDirectSolver.jl vs cuDSS time ratio per feature

The comparison was measured at commit d750376 (2026-10-28), before T33 moved the construction of the fused plans into the analysis; the cholesky_fused factorization column there still includes building the plans. The per-matrix numbers are in bench/comparison/comparison.md. The benchmark harness and the cuDSS baselines are described in bench/README.md; the comparison is regenerated by hand:

julia --project=bench bench/compare.jl --solver=cudss
julia --project=bench bench/compare.jl --solver=sds --backend=cuda
julia --project=bench/report bench/compare_report.jl

Fused pipeline

FusedSolver is the fast path of the interior-point loop: the analysis builds a plan in which one dependency-counter kernel factorizes the whole elimination tree per refactorization (instead of one launch per level and size bin), followed by the inverses of the diagonal blocks of the fronts, and the solve is a partitioned-inverse sweep, one dependency-counter kernel per direction. The feature cholesky_fused of the comparison measures it; its analysis phase includes a stock factorization and building the plans.

It is restricted to what the kernels do: a GPU backend (the dependency-counter kernels spin on resident workgroups, so the KernelAbstractions CPU backend is refused), real "SPD" matrices and real "S" matrices factored without pivoting, one right-hand side, no uniform batch, Schur complement, matching, iterative refinement, deterministic mode or mixed precision; each raises NotSupportedError (the docstring lists them). DirectSolver remains the general solver; T24–T26 move the same kernels under its execute!.