#[repr(u32)]pub enum cusolverIRSRefinement_t {
CUSOLVER_IRS_REFINE_NOT_SET = 1_100,
CUSOLVER_IRS_REFINE_NONE = 1_101,
CUSOLVER_IRS_REFINE_CLASSICAL = 1_102,
CUSOLVER_IRS_REFINE_CLASSICAL_GMRES = 1_103,
CUSOLVER_IRS_REFINE_GMRES = 1_104,
CUSOLVER_IRS_REFINE_GMRES_GMRES = 1_105,
CUSOLVER_IRS_REFINE_GMRES_NOPCOND = 1_106,
CUSOLVER_PREC_DD = 1_150,
CUSOLVER_PREC_SS = 1_151,
CUSOLVER_PREC_SHT = 1_152,
}Expand description
The cusolverIRSRefinement_t type indicates which solver type would be used for the specific cusolver function. Most of our experimentation shows that cusolverIRSRefinement_t::CUSOLVER_IRS_REFINE_GMRES is the best option.
More details about the refinement process can be found in Azzam Haidar, Stanimire Tomov, Jack Dongarra, and Nicholas J. Higham. 2018. Harnessing GPU tensor cores for fast FP16 arithmetic to speed up mixed-precision iterative refinement solvers. In Proceedings of the International Conference for High Performance Computing, Networking, Storage, and Analysis (SC ‘18). IEEE Press, Piscataway, NJ, USA, Article 47, 11 pages..
Variants§
CUSOLVER_IRS_REFINE_NOT_SET = 1_100
Solver is not set; this value is what is set when creating the params structure. IRS solver will return an error.
CUSOLVER_IRS_REFINE_NONE = 1_101
No refinement solver, the IRS solver performs a factorization followed by a solve without any refinement. For example if the IRS solver was cusolverDnIRSXgesv, this is equivalent to a Xgesv routine without refinement and where the factorization is carried out in the lowest precision. If for example the main precision was CUSOLVER_R_64F and the lowest was CUSOLVER_R_64F as well, then this is equivalent to a call to cusolverDnDgesv().
CUSOLVER_IRS_REFINE_CLASSICAL = 1_102
Classical iterative refinement solver. Similar to the one used in LAPACK routines.
CUSOLVER_IRS_REFINE_CLASSICAL_GMRES = 1_103
Classical iterative refinement solver that uses the GMRES (Generalized Minimal Residual) internally to solve the correction equation at each iteration. We call the classical refinement iteration the outer iteration while the GMRES is called inner iteration. Note that if the tolerance of the inner GMRES is set very low, lets say to machine precision, then the outer classical refinement iteration will performs only one iteration and thus this option will behave like cusolverIRSRefinement_t::CUSOLVER_IRS_REFINE_GMRES.
CUSOLVER_IRS_REFINE_GMRES = 1_104
GMRES (Generalized Minimal Residual) based iterative refinement solver. In recent study, the GMRES method has drawn the scientific community attention for its ability to be used as refinement solver that outperforms the classical iterative refinement method. Based on our experimentation, we recommend this setting.
CUSOLVER_IRS_REFINE_GMRES_GMRES = 1_105
Similar to cusolverIRSRefinement_t::CUSOLVER_IRS_REFINE_CLASSICAL_GMRES which consists of classical refinement process that uses GMRES to solve the inner correction system; here it is a GMRES (Generalized Minimal Residual) based iterative refinement solver that uses another GMRES internally to solve the preconditioned system.
CUSOLVER_IRS_REFINE_GMRES_NOPCOND = 1_106
CUSOLVER_PREC_DD = 1_150
CUSOLVER_PREC_SS = 1_151
CUSOLVER_PREC_SHT = 1_152
Trait Implementations§
Source§impl Clone for cusolverIRSRefinement_t
impl Clone for cusolverIRSRefinement_t
Source§fn clone(&self) -> cusolverIRSRefinement_t
fn clone(&self) -> cusolverIRSRefinement_t
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 cusolverIRSRefinement_t
impl Debug for cusolverIRSRefinement_t
Source§impl From<cusolverIRSRefinement_t> for u32
impl From<cusolverIRSRefinement_t> for u32
Source§fn from(enum_value: cusolverIRSRefinement_t) -> Self
fn from(enum_value: cusolverIRSRefinement_t) -> Self
Source§impl Hash for cusolverIRSRefinement_t
impl Hash for cusolverIRSRefinement_t
Source§impl Ord for cusolverIRSRefinement_t
impl Ord for cusolverIRSRefinement_t
Source§fn cmp(&self, other: &cusolverIRSRefinement_t) -> Ordering
fn cmp(&self, other: &cusolverIRSRefinement_t) -> Ordering
1.21.0 (const: unstable) · Source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
Source§impl PartialEq for cusolverIRSRefinement_t
impl PartialEq for cusolverIRSRefinement_t
Source§fn eq(&self, other: &cusolverIRSRefinement_t) -> bool
fn eq(&self, other: &cusolverIRSRefinement_t) -> bool
self and other values to be equal, and is used by ==.