template<typename Scalar_, typename Derived>
class Eigen::gpu::internal::SparseSolverBase< Scalar_, Derived >
CRTP base for GPU sparse direct solvers.
- Template Parameters
-
| Scalar_ | Element type (passed explicitly to avoid incomplete-type issues with CRTP). |
| Derived | The concrete solver class (SparseLLT, SparseLDLT, SparseLU). Must provide:
static constexpr cudssMatrixType_t cudss_matrix_type()
static constexpr cudssMatrixViewType_t cudss_matrix_view()
static constexpr bool needs_csr_conversion()
|
template<typename Scalar_, typename Derived>
Apply cfg to this solver. Most knobs are consumed by the phase they affect — reordering and matching by analyzePattern(), pivoting by factorize(), refinement by solve() — so call setConfig() before the first phase whose behavior it changes; phases already executed are unaffected.
The two hybrid modes are the exception. cuDSS builds different analysis state for them, and documents that analysis has to be redone when hybrid memory is enabled afterwards, so hybridMemory and hybridExecute must be set before analyzePattern(). Changing either one after analysis invalidates it: analyzePattern() has to be called again before factorize(), which would otherwise consume analysis state built for a different execution and memory mode. hybridMemoryDeviceLimit is only a budget within hybridMemory and may be changed between factorizations.
Non-default fields require cuDSS >= 0.8, which EIGEN_HAS_CUDSS_SOLVER_CONFIG reports. Below that, the algorithm enumerators are not declared, so selecting one does not compile; a non-default value of the remaining fields is rejected rather than applied, asserting and leaving info() reporting InvalidInput until the config is reset to default.