![]() |
Ginkgo
Generated from pipelines/2837190956 branch based on develop. Ginkgo version 2.0.0
A numerical linear algebra library targeting many-core architectures
|
CB-GMRES or the compressed basis generalized minimal residual method is an iterative type Krylov subspace method which is suitable for nonsymmetric linear systems. More...
#include <ginkgo/core/solver/cb_gmres.hpp>
Classes | |
| class | Factory |
| struct | parameters_type |
Public Types | |
| using | value_type = ValueType |
Public Member Functions | |
| size_type | get_krylov_dim () const |
| Returns the Krylov dimension. More... | |
| void | set_krylov_dim (size_type other) |
| Sets the Krylov dimension. More... | |
| cb_gmres::storage_precision | get_storage_precision () const |
| Returns the storage precision used internally. More... | |
| const parameters_type & | get_parameters () const |
Public Member Functions inherited from gko::LinOp | |
| void | apply (ptr_param< const LinOp > b, ptr_param< LinOp > x) const |
| Applies a linear operator to a vector (or a sequence of vectors). More... | |
| void | apply (ptr_param< const LinOp > alpha, ptr_param< const LinOp > b, ptr_param< const LinOp > beta, ptr_param< LinOp > x) const |
| Performs the operation x = alpha * op(b) + beta * x. More... | |
| const dim< 2 > & | get_size () const noexcept |
| Returns the size of the operator. More... | |
| virtual bool | apply_uses_initial_guess () const |
| Returns true if the linear operator uses the data given in x as an initial guess. More... | |
| LinOp & | operator= (const LinOp &)=default |
| Copy-assigns a LinOp. More... | |
| LinOp & | operator= (LinOp &&other) |
| Move-assigns a LinOp. More... | |
| LinOp (const LinOp &)=default | |
| Copy-constructs a LinOp. More... | |
| LinOp (LinOp &&other) | |
| Move-constructs a LinOp. More... | |
Public Member Functions inherited from gko::PolymorphicObject | |
| virtual void | validate_data () const |
| Throws gko::InvalidData exception if we found the data inside the object does not fulfill certain property up to our knowledge. | |
| PolymorphicObject & | operator= (const PolymorphicObject &) |
| std::shared_ptr< const Executor > | get_executor () const noexcept |
| Returns the Executor of the object. More... | |
Public Member Functions inherited from gko::log::EnableLogging< PolymorphicObject > | |
| void | add_logger (std::shared_ptr< const Logger > logger) override |
| void | remove_logger (const Logger *logger) override |
| void | remove_logger (ptr_param< const Logger > logger) |
| const std::vector< std::shared_ptr< const Logger > > & | get_loggers () const override |
| void | clear_loggers () override |
Public Member Functions inherited from gko::log::Loggable | |
| void | remove_logger (ptr_param< const Logger > logger) |
Public Member Functions inherited from gko::solver::EnablePreconditionedIterativeSolver< ValueType, CbGmres< ValueType > > | |
| EnablePreconditionedIterativeSolver (std::shared_ptr< const LinOp > system_matrix, std::shared_ptr< const stop::CriterionFactory > stop_factory, std::shared_ptr< const LinOp > preconditioner) | |
| EnablePreconditionedIterativeSolver (std::shared_ptr< const LinOp > system_matrix, const FactoryParameters ¶ms) | |
Public Member Functions inherited from gko::solver::EnableSolverBase< CbGmres< ValueType > > | |
| EnableSolverBase & | operator= (const EnableSolverBase &other) |
| Creates a shallow copy of the provided system matrix, clones it onto this executor if executors don't match. | |
| EnableSolverBase & | operator= (EnableSolverBase &&other) |
| Moves the provided system matrix, clones it onto this executor if executors don't match. More... | |
| EnableSolverBase (std::shared_ptr< const LinOp > system_matrix) | |
| EnableSolverBase (const EnableSolverBase &other) | |
| Creates a shallow copy of the provided system matrix. | |
| EnableSolverBase (EnableSolverBase &&other) | |
| Moves the provided system matrix. More... | |
| int | get_num_workspace_ops () const override |
| std::vector< std::string > | get_workspace_op_names () const override |
| std::vector< int > | get_workspace_scalars () const override |
| Returns the IDs of all scalars (workspace vectors with system dimension-independent size, usually 1 x num_rhs). | |
| std::vector< int > | get_workspace_vectors () const override |
| Returns the IDs of all vectors (workspace vectors with system dimension-dependent size, usually system_matrix_size x num_rhs). | |
Public Member Functions inherited from gko::solver::SolverBase< LinOp > | |
| std::shared_ptr< const LinOp > | get_system_matrix () const |
| Returns the system matrix, with its concrete type, used by the solver. More... | |
Public Member Functions inherited from gko::solver::EnableIterativeBase< CbGmres< ValueType > > | |
| EnableIterativeBase & | operator= (const EnableIterativeBase &other) |
| Creates a shallow copy of the provided stopping criterion, clones it onto this executor if executors don't match. | |
| EnableIterativeBase & | operator= (EnableIterativeBase &&other) |
| Moves the provided stopping criterion, clones it onto this executor if executors don't match. More... | |
| EnableIterativeBase (std::shared_ptr< const stop::CriterionFactory > stop_factory) | |
| EnableIterativeBase (const EnableIterativeBase &other) | |
| Creates a shallow copy of the provided stopping criterion. | |
| EnableIterativeBase (EnableIterativeBase &&other) | |
| Moves the provided stopping criterion. More... | |
| void | set_stop_criterion_factory (std::shared_ptr< const stop::CriterionFactory > new_stop_factory) override |
| Sets the stopping criterion of the solver. More... | |
Public Member Functions inherited from gko::solver::IterativeBase | |
| std::shared_ptr< const stop::CriterionFactory > | get_stop_criterion_factory () const |
| Gets the stopping criterion factory of the solver. More... | |
Public Member Functions inherited from gko::solver::EnablePreconditionable< CbGmres< ValueType > > | |
| void | set_preconditioner (std::shared_ptr< const LinOp > new_precond) override |
| Sets the preconditioner operator used by the Preconditionable. More... | |
| EnablePreconditionable & | operator= (const EnablePreconditionable &other) |
| Creates a shallow copy of the provided preconditioner, clones it onto this executor if executors don't match. | |
| EnablePreconditionable & | operator= (EnablePreconditionable &&other) |
| Moves the provided preconditioner, clones it onto this executor if executors don't match. More... | |
| EnablePreconditionable (std::shared_ptr< const LinOp > preconditioner) | |
| EnablePreconditionable (const EnablePreconditionable &other) | |
| Creates a shallow copy of the provided preconditioner. | |
| EnablePreconditionable (EnablePreconditionable &&other) | |
| Moves the provided preconditioner. More... | |
Public Member Functions inherited from gko::Preconditionable | |
| virtual std::shared_ptr< const LinOp > | get_preconditioner () const |
| Returns the preconditioner operator used by the Preconditionable. More... | |
Static Public Member Functions | |
| static auto | build () -> decltype(Factory ::create()) |
| 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. More... | |
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.
Mathematically CB-GMRES is the same algorithm as standard GMRES — the Arnoldi process produces an orthonormal basis \( V_m \) and an upper Hessenberg \( \bar H_m \) with \( A V_m = V_{m+1} \bar H_m \), and the iterate is chosen as
\[ x_m = x_0 + V_m y_m, \qquad y_m = \arg\min_{y} \| \beta e_1 - \bar H_m y \|_2. \]
The "compressed basis" variant stores the columns of \( V_m \) in a precision lower than ValueType: each basis vector is cast down to the storage type when written and cast back up when read. The Hessenberg matrix, the Givens rotations, and the working residual all stay in full ValueType precision, so the final approximation has the same accuracy as standard GMRES while the basis storage and the bandwidth needed to apply it are reduced. See the storage_precision enum for the supported compression options.
| ValueType | the arithmetic precision and the precision of matrix elements |
|
inline |
Returns the Krylov dimension.
References gko::solver::CbGmres< ValueType >::parameters_type::krylov_dim.
|
inline |
Returns the storage precision used internally.
References gko::solver::CbGmres< ValueType >::parameters_type::storage_precision.
|
static |
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.
| 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. |
|
inline |
Sets the Krylov dimension.
| other | the new Krylov dimension |
References gko::solver::CbGmres< ValueType >::parameters_type::krylov_dim.
1.8.16