Ginkgo Generated from branch based on main. Ginkgo version 1.10.0
A numerical linear algebra library targeting many-core architectures
Loading...
Searching...
No Matches
gko::multigrid::Pgm< ValueType, IndexType > Class Template Reference

Parallel graph match (Pgm) is the aggregate method introduced in the paper M. More...

#include <ginkgo/core/multigrid/pgm.hpp>

Inheritance diagram for gko::multigrid::Pgm< ValueType, IndexType >:
[legend]
Collaboration diagram for gko::multigrid::Pgm< ValueType, IndexType >:
[legend]

Classes

class  Factory
struct  parameters_type

Public Types

using value_type = ValueType
using index_type = IndexType
Public Types inherited from gko::EnablePolymorphicAssignment< Pgm< default_precision, int32 > >
using result_type
Public Types inherited from gko::ConvertibleTo< Pgm< default_precision, int32 > >
using result_type
Public Types inherited from gko::multigrid::EnableMultigridLevel< default_precision >
using value_type
Public Types inherited from gko::UseComposition< default_precision >
using value_type

Public Member Functions

std::shared_ptr< const LinOpget_system_matrix () const
 Returns the system operator (matrix) of the linear system.
IndexType * get_agg () noexcept
 Returns the aggregate group.
const IndexType * get_const_agg () const noexcept
 Returns the aggregate group.
const parameters_typeget_parameters () const
Public Member Functions inherited from gko::EnableLinOp< Pgm< default_precision, int32 > >
const Pgm< default_precision, int32 > * apply (ptr_param< const LinOp > b, ptr_param< LinOp > x) const
Public Member Functions inherited from gko::EnableAbstractPolymorphicObject< Pgm< default_precision, int32 >, LinOp >
std::unique_ptr< Pgm< default_precision, int32 > > create_default (std::shared_ptr< const Executor > exec) const
std::unique_ptr< Pgm< default_precision, int32 > > clone (std::shared_ptr< const Executor > exec) const
Pgm< default_precision, int32 > * copy_from (const PolymorphicObject *other)
Pgm< default_precision, int32 > * move_from (ptr_param< PolymorphicObject > other)
Pgm< default_precision, int32 > * clear ()
Public Member Functions inherited from gko::LinOp
LinOpapply (ptr_param< const LinOp > b, ptr_param< LinOp > x)
 Applies a linear operator to a vector (or a sequence of vectors).
const LinOpapply (ptr_param< const LinOp > b, ptr_param< LinOp > x) const
LinOpapply (ptr_param< const LinOp > alpha, ptr_param< const LinOp > b, ptr_param< const LinOp > beta, ptr_param< LinOp > x)
 Performs the operation x = alpha * op(b) + beta * x.
const LinOpapply (ptr_param< const LinOp > alpha, ptr_param< const LinOp > b, ptr_param< const LinOp > beta, ptr_param< LinOp > x) const
const dim< 2 > & get_size () const noexcept
 Returns the size of the operator.
virtual bool apply_uses_initial_guess () const
 Returns true if the linear operator uses the data given in x as an initial guess.
LinOpoperator= (const LinOp &)=default
 Copy-assigns a LinOp.
LinOpoperator= (LinOp &&other)
 Move-assigns a LinOp.
 LinOp (const LinOp &)=default
 Copy-constructs a LinOp.
 LinOp (LinOp &&other)
 Move-constructs a LinOp.
Public Member Functions inherited from gko::EnableAbstractPolymorphicObject< LinOp >
std::unique_ptr< LinOpcreate_default (std::shared_ptr< const Executor > exec) const
std::unique_ptr< LinOpclone (std::shared_ptr< const Executor > exec) const
LinOpcopy_from (const PolymorphicObject *other)
LinOpmove_from (ptr_param< PolymorphicObject > other)
LinOpclear ()
Public Member Functions inherited from gko::PolymorphicObject
PolymorphicObjectoperator= (const PolymorphicObject &)
std::unique_ptr< PolymorphicObjectcreate_default (std::shared_ptr< const Executor > exec) const
 Creates a new "default" object of the same dynamic type as this object.
std::unique_ptr< PolymorphicObjectcreate_default () const
 Creates a new "default" object of the same dynamic type as this object.
std::unique_ptr< PolymorphicObjectclone (std::shared_ptr< const Executor > exec) const
 Creates a clone of the object.
std::unique_ptr< PolymorphicObjectclone () const
 Creates a clone of the object.
PolymorphicObjectcopy_from (const PolymorphicObject *other)
 Copies another object into this object.
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)
 Moves another object into this object.
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)
 Copies another object into this object.
PolymorphicObjectcopy_from (const std::shared_ptr< const PolymorphicObject > &other)
 Copies another object into this object.
PolymorphicObjectmove_from (ptr_param< PolymorphicObject > other)
 Moves another object into this object.
PolymorphicObjectclear ()
 Transforms the object into its default state.
std::shared_ptr< const Executorget_executor () const noexcept
 Returns the Executor of the object.
Public Member Functions inherited from gko::log::EnableLogging< PolymorphicObject >
void add_logger (std::shared_ptr< const Logger > logger) override
 Adds a new logger to the list of subscribed loggers.
void remove_logger (const Logger *logger) override
 Removes a logger from the list of subscribed loggers.
const std::vector< std::shared_ptr< const Logger > > & get_loggers () const override
 Returns the vector containing all loggers registered at this object.
void clear_loggers () override
 Remove all loggers registered at this object.
Public Member Functions inherited from gko::log::Loggable
void remove_logger (ptr_param< const Logger > logger)
Public Member Functions inherited from gko::EnablePolymorphicAssignment< Pgm< default_precision, int32 > >
void convert_to (result_type *result) const override
void move_to (result_type *result) override
Public Member Functions inherited from gko::multigrid::EnableMultigridLevel< default_precision >
std::shared_ptr< const LinOpget_fine_op () const override
 Returns the operator on fine level.
std::shared_ptr< const LinOpget_restrict_op () const override
 Returns the restrict operator.
std::shared_ptr< const LinOpget_coarse_op () const override
 Returns the operator on coarse level.
std::shared_ptr< const LinOpget_prolong_op () const override
 Returns the prolong operator.
Public Member Functions inherited from gko::UseComposition< default_precision >
std::shared_ptr< Composition< default_precision > > get_composition () const
 Returns the composition operators.
std::shared_ptr< const LinOpget_operator_at (size_type index) const
 Returns the operator at index-th position of composition.

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, IndexType >())
 Create the parameters from the property_tree.

Friends

class EnableLinOp< Pgm >
class EnablePolymorphicObject< Pgm, LinOp >

Detailed Description

template<typename ValueType = default_precision, typename IndexType = int32>
class gko::multigrid::Pgm< ValueType, IndexType >

Parallel graph match (Pgm) is the aggregate method introduced in the paper M.

Naumov et al., "AmgX: A Library for GPU Accelerated Algebraic Multigrid and Preconditioned Iterative Methods". Current implementation only contains size = 2 version.

Pgm creates the aggregate group according to the matrix value not the structure. Pgm gives two steps (one-phase handshaking) to group the elements. 1: get the strongest neighbor of each unaggregated element. 2: group the elements whose strongest neighbor is each other. repeating until reaching the given conditions. After that, the un-aggregated elements are assigned to an aggregated group or are left alone.

Template Parameters
ValueTypeprecision of matrix elements
IndexTypeprecision of matrix indexes

Member Function Documentation

◆ get_agg()

template<typename ValueType = default_precision, typename IndexType = int32>
IndexType * gko::multigrid::Pgm< ValueType, IndexType >::get_agg ( )
inlinenoexcept

Returns the aggregate group.

Aggregate group whose size is same as the number of rows. Stores the mapping information from row index to coarse row index. i.e., agg[row_idx] = coarse_row_idx.

Returns
the aggregate group.

◆ get_const_agg()

template<typename ValueType = default_precision, typename IndexType = int32>
const IndexType * gko::multigrid::Pgm< ValueType, IndexType >::get_const_agg ( ) const
inlinenoexcept

Returns the aggregate group.

Aggregate group whose size is same as the number of rows. Stores the mapping information from row index to coarse row index. i.e., agg[row_idx] = coarse_row_idx.

Returns
the aggregate group.
Note
This is the constant version of the function, which can be significantly more memory efficient than the non-constant version, so always prefer this version.

◆ get_system_matrix()

template<typename ValueType = default_precision, typename IndexType = int32>
std::shared_ptr< const LinOp > gko::multigrid::Pgm< ValueType, IndexType >::get_system_matrix ( ) const
inline

Returns the system operator (matrix) of the linear system.

Returns
the system operator (matrix)

◆ parse()

template<typename ValueType = default_precision, typename IndexType = int32>
parameters_type gko::multigrid::Pgm< 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 files: