gko::solver::CbGmres#

Compressed-basis GMRES. A mixed-precision variant of GMRES that stores the Krylov basis in a lower precision than the working precision of the matrix and right-hand side. Reduces memory bandwidth and storage for the basis vectors while the arithmetic stays in the working precision; the storage precision is set with the storage_precision factory parameter.

template<typename ValueType = default_precision>
class CbGmres #

Inherits from

  • public gko::EnableLinOp<CbGmres<default_precision>>

  • public gko::solver::EnablePreconditionedIterativeSolver<default_precision, CbGmres<default_precision>>

CB-GMRES or the compressed basis generalized minimal residual method is an iterative type Krylov subspace method which is suitable for nonsymmetric linear systems.

The implementation in Ginkgo makes use of the merged kernel to make the best use of data locality. The inner operations in one iteration of CB-GMRES are merged into 2 separate steps. Classical Gram-Schmidt with reorthogonalization is used.

The Krylov basis can be stored in reduced precision (compressed) to reduce memory accesses, while all computations (including Krylov basis operations) are performed in the same arithmetic precision ValueType. By default, the Krylov basis are stored in one precision lower than ValueType.

Template Parameters:

ValueType – the arithmetic precision and the precision of matrix elements

Public Functions

inline size_type get_krylov_dim() const#

Returns the Krylov dimension.

Returns:

the Krylov dimension

inline void set_krylov_dim(size_type other)#

Sets the Krylov dimension

Parameters:

other – the new Krylov dimension

inline cb_gmres::storage_precision get_storage_precision() const#

Returns the storage precision used internally.

Returns:

the storage precision used internally

Public Static Functions

static parameters_type parse(
const config::pnode &config,
const config::registry &context,
const config::type_descriptor &td_for_child = config::make_type_descriptor<ValueType>(),
)#

Create the parameters from the property_tree. Because this is directly tied to the specific type, the value/index type settings within config are ignored and type_descriptor is only used for children configs.

Parameters:
  • config – the property tree for setting

  • context – the registry

  • td_for_child – the type descriptor for children configs. The default uses the value type of this class.

Returns:

parameters

struct parameters_type #

Inherits from

  • public gko::solver::enable_preconditioned_iterative_solver_factory_parameters<parameters_type, Factory>

Public Members

cb_gmres::storage_precision storage_precision#

Determines which storage type is used.

size_type krylov_dim#

Krylov dimension factory.