Ginkgo  Generated from pipelines/2837190956 branch based on develop. Ginkgo version 2.0.0
A numerical linear algebra library targeting many-core architectures
Classes | Public Types | Public Member Functions | Static Public Member Functions | List of all members
gko::factorization::ParIct< ValueType, IndexType > Class Template Reference

ParICT is an incomplete threshold-based Cholesky factorization which is computed in parallel. More...

#include <ginkgo/core/factorization/par_ict.hpp>

Inheritance diagram for gko::factorization::ParIct< ValueType, IndexType >:
[legend]
Collaboration diagram for gko::factorization::ParIct< ValueType, IndexType >:
[legend]

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 Member Functions

std::shared_ptr< const matrix_typeget_l_factor () const
 
std::shared_ptr< const matrix_typeget_lt_factor () const
 
const parameters_typeget_parameters () const
 
- Public Member Functions inherited from gko::Composition< ValueType >
const std::vector< std::shared_ptr< const LinOp > > & get_operators () const noexcept
 Returns a list of operators of the composition. More...
 
std::unique_ptr< LinOptranspose () const override
 Returns a LinOp representing the transpose of the Transposable object. More...
 
std::unique_ptr< LinOpconj_transpose () const override
 Returns a LinOp representing the conjugate transpose of the Transposable object. More...
 
Compositionoperator= (const Composition &)
 Copy-assigns a Composition. More...
 
Compositionoperator= (Composition &&)
 Move-assigns a Composition. More...
 
 Composition (const Composition &)
 Copy-constructs a Composition. More...
 
 Composition (Composition &&)
 Move-constructs a Composition. More...
 
- 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...
 
LinOpoperator= (const LinOp &)=default
 Copy-assigns a LinOp. More...
 
LinOpoperator= (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.
 
PolymorphicObjectoperator= (const PolymorphicObject &)
 
std::shared_ptr< const Executorget_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)
 

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 >())
 Create the parameters from the property_tree. More...
 
- Static Public Member Functions inherited from gko::EnableCreateMethod< Composition< ValueType > >
static std::unique_ptr< Composition< ValueType > > create (Args &&... args)
 

Detailed Description

template<typename ValueType = default_precision, typename IndexType = int32>
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:

  1. Calculate the residual \(R = A - LL^T\).
  2. Add new non-zero locations from \(R\) to \(L\). The new non-zero locations are initialized from the corresponding residual entries.
  3. Execute a fixed-point iteration on \(L\) according to

    \[ F(L)_{ij} = \begin{cases} \frac{1}{l_{jj}} \left( a_{ij} - \sum_{k=1}^{j-1} l_{ik} l_{jk} \right), & i \neq j, \\ \sqrt{ a_{ij} - \sum_{k=1}^{j-1} l_{ik} l_{jk} }, & i = j. \end{cases} \]

  4. Remove the smallest entries (by magnitude) from \(L\).
  5. Execute a fixed-point iteration on the (now sparser) \(L\).

This ParICT algorithm thus improves the sparsity pattern and the approximation of \(L\) simultaneously.

References
  • Anzt, H., Chow, E., Dongarra, J. ParILUT — A Parallel Threshold ILU for GPUs. 2019 IEEE International Parallel and Distributed Processing Symposium (IPDPS), pp. 231–241. https://doi.org/10.1109/IPDPS.2019.00033
Template Parameters
ValueTypeType of the values of all matrices used in this class
IndexTypeType of the indices of all matrices used in this class

Member Function Documentation

◆ parse()

template<typename ValueType = default_precision, typename IndexType = int32>
static parameters_type gko::factorization::ParIct< ValueType, IndexType >::parse ( const config::pnode config,
const config::registry context,
const config::type_descriptor td_for_child = config::make_type_descriptor< ValueType, IndexType >() 
)
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
configthe property tree for setting
contextthe registry
td_for_childthe 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: