Metal extension

Loaded with using Metal. Metal has no vendor sparse matrix container, so the matrix is a CSR that owns MtlArrays, and only Float32 is supported; fronts at least 64 wide are factored by the MPS Cholesky, the other dense operations run on the allocation-free KernelAbstractions kernels (Metal.jl's mul!, the allocating impl = :generic path, still serves panel GEMM and SYRK when selected explicitly).

SparseDirectSolver.max_local_bytes — Method
max_local_bytes(::MetalBackend) -> Int

Metal's maximum static threadgroup-memory allocation per workgroup (32 KiB on Apple GPUs). The symbolic scheduler uses this to exclude the 48 and 64 KiB regime-A kernel classes.

source
SparseDirectSolver.to_backend — Method
to_backend(A::SparseMatrixCSC, ::MetalBackend; index = 'O') -> CSR

Build the CSR arrays of A on the host and upload them to Metal. Metal has no vendor sparse matrix container, so the returned CSR directly owns MtlVector index and value arrays.

source