ParIct< ValueType, IndexType > Class Template Reference#
|
Reference API
|
#include <ginkgo/core/factorization/par_ict.hpp>
Classes | |
| class | Factory |
| struct | parameters_type |
Public Types | |
| using | value_type = ValueType |
| using | index_type = IndexType |
| using | matrix_type = matrix::Csr< ValueType, IndexType > |
Public Types inherited from gko::Composition< ValueType > | |
| using | value_type = ValueType |
| using | transposed_type = Composition< ValueType > |
Public Types inherited from gko::EnablePolymorphicAssignment< ConcreteLinOp > | |
| using | result_type = ConcreteLinOp |
Public Types inherited from gko::ConvertibleTo< ResultType > | |
| using | result_type = ResultType |
Public Member Functions | |
| std::shared_ptr< const matrix_type > | get_l_factor () const |
| std::shared_ptr< const matrix_type > | get_lt_factor () const |
| const parameters_type & | get_parameters () const |
Public Member Functions inherited from gko::Composition< ValueType > | |
| const std::vector< std::shared_ptr< const LinOp > > & | get_operators () const noexcept |
| std::unique_ptr< LinOp > | transpose () const override |
| std::unique_ptr< LinOp > | conj_transpose () const override |
| Composition & | operator= (const Composition &) |
| Composition & | operator= (Composition &&) |
| Composition (const Composition &) | |
| Composition (Composition &&) | |
Public Member Functions inherited from gko::EnableLinOp< ConcreteLinOp, PolymorphicBase > | |
| const ConcreteLinOp * | apply (ptr_param< const LinOp > b, ptr_param< LinOp > x) const |
| ConcreteLinOp * | apply (ptr_param< const LinOp > b, ptr_param< LinOp > x) |
| const ConcreteLinOp * | apply (ptr_param< const LinOp > alpha, ptr_param< const LinOp > b, ptr_param< const LinOp > beta, ptr_param< LinOp > x) const |
| ConcreteLinOp * | apply (ptr_param< const LinOp > alpha, ptr_param< const LinOp > b, ptr_param< const LinOp > beta, ptr_param< LinOp > x) |
Public Member Functions inherited from gko::EnableAbstractPolymorphicObject< AbstractObject, PolymorphicBase > | |
| std::unique_ptr< AbstractObject > | create_default (std::shared_ptr< const Executor > exec) const |
| std::unique_ptr< AbstractObject > | create_default () const |
| std::unique_ptr< AbstractObject > | clone (std::shared_ptr< const Executor > exec) const |
| std::unique_ptr< AbstractObject > | clone () const |
| AbstractObject * | copy_from (const PolymorphicObject *other) |
| template<typename Derived > | |
| std::enable_if_t< std::is_base_of< PolymorphicObject, std::decay_t< Derived > >::value, AbstractObject > * | copy_from (std::unique_ptr< Derived > &&other) |
| template<typename Derived > | |
| std::enable_if_t< std::is_base_of< PolymorphicObject, std::decay_t< Derived > >::value, AbstractObject > * | copy_from (const std::unique_ptr< Derived > &other) |
| AbstractObject * | copy_from (const std::shared_ptr< const PolymorphicObject > &other) |
| AbstractObject * | move_from (ptr_param< PolymorphicObject > other) |
| AbstractObject * | clear () |
Public Member Functions inherited from gko::PolymorphicObject | |
| PolymorphicObject & | operator= (const PolymorphicObject &) |
| std::unique_ptr< PolymorphicObject > | create_default (std::shared_ptr< const Executor > exec) const |
| std::unique_ptr< PolymorphicObject > | create_default () const |
| std::unique_ptr< PolymorphicObject > | clone (std::shared_ptr< const Executor > exec) const |
| std::unique_ptr< PolymorphicObject > | clone () const |
| PolymorphicObject * | copy_from (const PolymorphicObject *other) |
| template<typename Derived , typename Deleter > | |
| std::enable_if_t< std::is_base_of< PolymorphicObject, std::decay_t< Derived > >::value, PolymorphicObject > * | copy_from (std::unique_ptr< Derived, Deleter > &&other) |
| template<typename Derived , typename Deleter > | |
| std::enable_if_t< std::is_base_of< PolymorphicObject, std::decay_t< Derived > >::value, PolymorphicObject > * | copy_from (const std::unique_ptr< Derived, Deleter > &other) |
| PolymorphicObject * | copy_from (const std::shared_ptr< const PolymorphicObject > &other) |
| PolymorphicObject * | move_from (ptr_param< PolymorphicObject > other) |
| PolymorphicObject * | clear () |
| std::shared_ptr< const Executor > | get_executor () const noexcept |
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::EnablePolymorphicAssignment< ConcreteLinOp > | |
| void | convert_to (result_type *result) const override |
| void | move_to (result_type *result) override |
Public Member Functions inherited from gko::ConvertibleTo< ResultType > | |
| virtual void | convert_to (result_type *result) const =0 |
| void | convert_to (ptr_param< result_type > result) const |
| virtual void | move_to (result_type *result)=0 |
| void | move_to (ptr_param< result_type > result) |
Static Public Member Functions | |
| template<typename... Args> | |
| static std::unique_ptr< Composition< ValueType > > | create (Args &&... args)=delete |
| 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, IndexType >()) |
Static Public Member Functions inherited from gko::EnableCreateMethod< ConcreteType > | |
| template<typename... Args> | |
| static std::unique_ptr< ConcreteType > | create (Args &&... args) |
Protected Member Functions | |
| ParIct (const Factory *factory, std::shared_ptr< const LinOp > system_matrix) | |
| std::unique_ptr< Composition< ValueType > > | generate_l_lt (const std::shared_ptr< const LinOp > &system_matrix) const |
Protected Member Functions inherited from gko::Composition< ValueType > | |
| void | add_operators () |
| template<typename... Rest> | |
| void | add_operators (std::shared_ptr< const LinOp > oper, Rest &&... rest) |
| Composition (std::shared_ptr< const Executor > exec) | |
| template<typename Iterator , typename = std::void_t< typename std::iterator_traits<Iterator>::iterator_category>> | |
| Composition (Iterator begin, Iterator end) | |
| template<typename... Rest> | |
| Composition (std::shared_ptr< const LinOp > oper, Rest &&... rest) | |
| void | apply_impl (const LinOp *b, LinOp *x) const override |
| void | apply_impl (const LinOp *alpha, const LinOp *b, const LinOp *beta, LinOp *x) const override |
Protected Member Functions inherited from gko::EnableLinOp< ConcreteLinOp, PolymorphicBase > | |
| ConcreteLinOp * | self () noexcept |
| const ConcreteLinOp * | self () const noexcept |
Protected Member Functions inherited from gko::EnablePolymorphicObject< ConcreteObject, PolymorphicBase > | |
| std::unique_ptr< PolymorphicObject > | create_default_impl (std::shared_ptr< const Executor > exec) const override |
| PolymorphicObject * | copy_from_impl (const PolymorphicObject *other) override |
| PolymorphicObject * | copy_from_impl (std::unique_ptr< PolymorphicObject > other) override |
| PolymorphicObject * | move_from_impl (PolymorphicObject *other) override |
| PolymorphicObject * | move_from_impl (std::unique_ptr< PolymorphicObject > other) override |
| PolymorphicObject * | clear_impl () override |
Protected Member Functions inherited from gko::PolymorphicObject | |
| PolymorphicObject (std::shared_ptr< const Executor > exec) | |
| PolymorphicObject (const PolymorphicObject &other) | |
Protected Member Functions inherited from gko::log::EnableLogging< PolymorphicObject > | |
| void | log (Params &&... params) const |
Additional Inherited Members | |
Protected Attributes inherited from gko::log::EnableLogging< PolymorphicObject > | |
| std::vector< std::shared_ptr< const Logger > > | loggers_ |
Detailed Description
class gko::factorization::ParIct< ValueType, IndexType >
ParICT is an incomplete threshold-based Cholesky factorization which is computed in parallel.
\(L\) is a lower triangular matrix which approximates a given symmetric positive definite matrix \(A\) with \(A \approx LL^T\). Here, \(L\) has a sparsity pattern that is improved iteratively based on its element-wise magnitude. The initial sparsity pattern is chosen based on the lower triangle of \(A\).
One iteration of the ParICT algorithm consists of the following steps:
- Calculating the residual \(R = A - LL^T\)
- Adding new non-zero locations from \(R\) to \(L\). The new non-zero locations are initialized based on the corresponding residual value.
- Executing a fixed-point iteration on \(L\) according to \( F(L) = \begin{cases} \frac{1}{l_{jj}} \left(a_{ij}-\sum_{k=1}^{j-1}l_{ik}l_{jk}\right), \quad & i \neq j \\ \sqrt{a_{ij}-\sum_{k=1}^{j-1}l_{ik}l_{jk}}, \quad & i = j \\ \end{cases} \)
- Removing the smallest entries (by magnitude) from \(L\)
- Executing a fixed-point iteration on the (now sparser) \(L\)
This ParICT algorithm thus improves the sparsity pattern and the approximation of \(L\) simultaneously.
The implementation follows the design of H. Anzt et al., ParILUT - A Parallel Threshold ILU for GPUs, 2019 IEEE International Parallel and Distributed Processing Symposium (IPDPS), pp. 231–241.
- Template Parameters
-
ValueType Type of the values of all matrices used in this class IndexType Type of the indices of all matrices used in this class
Member Function Documentation
◆ generate_l_lt()
|
protected |
Generates the incomplete LL^T factors, which will be returned as a composition of the lower (first element of the composition) and the upper factor (second element). The dynamic type of L and L^T is matrix_type
- Parameters
-
system_matrix the source matrix used to generate the factors.
- Note
- : system_matrix must be convertible to a Csr Matrix, otherwise, an exception is thrown.
- Returns
- A Composition, containing the incomplete LU factors for the given system_matrix (first element is L, then L^T)
◆ parse()
|
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.
- Parameters
-
config the property tree for setting context the registry td_for_child the type descriptor for children configs. The default uses the value/index type of this class.
- Returns
- parameters
The documentation for this class was generated from the following file:
- ginkgo/core/factorization/par_ict.hpp
Generated by
Public Types inherited from