Skip to main content

cusolverIRSRefinement_t

Enum cusolverIRSRefinement_t 

Source
#[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

Source§

fn clone(&self) -> cusolverIRSRefinement_t

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for cusolverIRSRefinement_t

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl From<cusolverIRSRefinement_t> for u32

Source§

fn from(enum_value: cusolverIRSRefinement_t) -> Self

Converts to this type from the input type.
Source§

impl Hash for cusolverIRSRefinement_t

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl Ord for cusolverIRSRefinement_t

Source§

fn cmp(&self, other: &cusolverIRSRefinement_t) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 (const: unstable) · Source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 (const: unstable) · Source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 (const: unstable) · Source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized,

Restrict a value to a certain interval. Read more
Source§

impl PartialEq for cusolverIRSRefinement_t

Source§

fn eq(&self, other: &cusolverIRSRefinement_t) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl PartialOrd for cusolverIRSRefinement_t

Source§

fn partial_cmp(&self, other: &cusolverIRSRefinement_t) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 (const: unstable) · Source§

fn lt(&self, other: &Rhs) -> bool

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0 (const: unstable) · Source§

fn le(&self, other: &Rhs) -> bool

Tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 (const: unstable) · Source§

fn gt(&self, other: &Rhs) -> bool

Tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 (const: unstable) · Source§

fn ge(&self, other: &Rhs) -> bool

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more
Source§

impl TryFrom<u32> for cusolverIRSRefinement_t

Source§

type Error = TryFromPrimitiveError<cusolverIRSRefinement_t>

The type returned in the event of a conversion error.
Source§

fn try_from(number: u32) -> Result<Self, TryFromPrimitiveError<Self>>

Performs the conversion.
Source§

impl TryFromPrimitive for cusolverIRSRefinement_t

Source§

const NAME: &'static str = "cusolverIRSRefinement_t"

Source§

type Primitive = u32

Source§

type Error = TryFromPrimitiveError<cusolverIRSRefinement_t>

Source§

fn try_from_primitive( number: Self::Primitive, ) -> Result<Self, TryFromPrimitiveError<Self>>

Source§

impl Copy for cusolverIRSRefinement_t

Source§

impl Eq for cusolverIRSRefinement_t

Source§

impl StructuralPartialEq for cusolverIRSRefinement_t

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.