#[repr(u32)]pub enum IrsRefinement {
NotSet = 1_100,
None = 1_101,
Classical = 1_102,
ClassicalGmres = 1_103,
Gmres = 1_104,
GmresGmres = 1_105,
GmresNoPcond = 1_106,
PrecDd = 1_150,
PrecSs = 1_151,
PrecSht = 1_152,
}Expand description
Indicates which IRS refinement solver to use for a cuSOLVER operation.
Empirically, IrsRefinement::Gmres is often the best option.
More details about the refinement process are available in Azzam Haidar, Stanimire Tomov, Jack Dongarra, and Nicholas J. Higham, “Harnessing GPU tensor cores for fast FP16 arithmetic to speed up mixed-precision iterative refinement solvers,” SC ’18.
Variants§
NotSet = 1_100
Solver is not set; this value is what is set when creating the params structure.
The IRS solver returns an error if this value is used.
None = 1_101
No refinement solver; the IRS solver performs a factorization followed by a solve without any refinement.
For example, when used with xgesv, this matches the non-refined solver path with the factorization carried out in the lowest precision.
If both the main and lowest precision are PrecisionType::R64F, this is equivalent to solving entirely in f64.
Classical = 1_102
Classical iterative refinement solver. Similar to the value used in LAPACK operations.
ClassicalGmres = 1_103
Classical iterative refinement solver that uses the GMRES (Generalized Minimal Residual) internally to solve the correction equation at each iteration.
The classical refinement iteration is the outer iteration, and GMRES is the inner iteration.
If the tolerance of the inner GMRES is very low, for example near machine precision, the outer classical refinement iteration performs only one iteration and this option behaves like IrsRefinement::Gmres.
Gmres = 1_104
GMRES (Generalized Minimal Residual) based iterative refinement solver. Recent studies use GMRES as a refinement solver that can outperform classical iterative refinement. Recommended setting based on cuSOLVER experimentation.
GmresGmres = 1_105
GMRES-based iterative refinement solver that uses another GMRES solve internally for the preconditioned system.
GmresNoPcond = 1_106
PrecDd = 1_150
PrecSs = 1_151
PrecSht = 1_152
Trait Implementations§
Source§impl Clone for IrsRefinement
impl Clone for IrsRefinement
Source§fn clone(&self) -> IrsRefinement
fn clone(&self) -> IrsRefinement
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for IrsRefinement
impl Debug for IrsRefinement
Source§impl Display for IrsRefinement
impl Display for IrsRefinement
Source§impl From<IrsRefinement> for cusolverIRSRefinement_t
impl From<IrsRefinement> for cusolverIRSRefinement_t
Source§fn from(value: IrsRefinement) -> Self
fn from(value: IrsRefinement) -> Self
Source§impl From<IrsRefinement> for u32
impl From<IrsRefinement> for u32
Source§fn from(enum_value: IrsRefinement) -> Self
fn from(enum_value: IrsRefinement) -> Self
Source§impl From<cusolverIRSRefinement_t> for IrsRefinement
impl From<cusolverIRSRefinement_t> for IrsRefinement
Source§fn from(value: cusolverIRSRefinement_t) -> Self
fn from(value: cusolverIRSRefinement_t) -> Self
Source§impl Hash for IrsRefinement
impl Hash for IrsRefinement
Source§impl PartialEq for IrsRefinement
impl PartialEq for IrsRefinement
Source§fn eq(&self, other: &IrsRefinement) -> bool
fn eq(&self, other: &IrsRefinement) -> bool
self and other values to be equal, and is used by ==.