Ginkgo  Generated from pipelines/1068515030 branch based on master. Ginkgo version 1.7.0
A numerical linear algebra library targeting many-core architectures
Public Types | Public Member Functions | Static Public Member Functions | Friends | List of all members
gko::experimental::distributed::Partition< LocalIndexType, GlobalIndexType > Class Template Reference

Represents a partition of a range of indices [0, size) into a disjoint set of parts. More...

#include <ginkgo/core/distributed/partition.hpp>

Inheritance diagram for gko::experimental::distributed::Partition< LocalIndexType, GlobalIndexType >:
[legend]
Collaboration diagram for gko::experimental::distributed::Partition< LocalIndexType, GlobalIndexType >:
[legend]

Public Types

using local_index_type = LocalIndexType
 
using global_index_type = GlobalIndexType
 
- Public Types inherited from gko::EnablePolymorphicAssignment< Partition< LocalIndexType, GlobalIndexType > >
using result_type = Partition< LocalIndexType, GlobalIndexType >
 
- Public Types inherited from gko::ConvertibleTo< Partition< LocalIndexType, GlobalIndexType > >
using result_type = Partition< LocalIndexType, GlobalIndexType >
 

Public Member Functions

size_type get_size () const
 Returns the total number of elements represented by this partition. More...
 
size_type get_num_ranges () const noexcept
 Returns the number of ranges stored by this partition. More...
 
comm_index_type get_num_parts () const noexcept
 Returns the number of parts represented in this partition. More...
 
comm_index_type get_num_empty_parts () const noexcept
 Returns the number of empty parts within this partition. More...
 
const global_index_type * get_range_bounds () const noexcept
 Returns the ranges boundary array stored by this partition. More...
 
const comm_index_typeget_part_ids () const noexcept
 Returns the part IDs of the ranges in this partition. More...
 
const local_index_type * get_range_starting_indices () const noexcept
 Returns the part-local starting index for each range in this partition. More...
 
const local_index_type * get_part_sizes () const noexcept
 Returns the part size array. More...
 
local_index_type get_part_size (comm_index_type part) const
 Returns the size of a part given by its part ID. More...
 
bool has_connected_parts () const
 Checks if each part has no more than one contiguous range. More...
 
bool has_ordered_parts () const
 Checks if the ranges are ordered by their part index. More...
 
- Public Member Functions inherited from gko::EnableAbstractPolymorphicObject< Partition< LocalIndexType, GlobalIndexType >, PolymorphicObject >
std::unique_ptr< Partition< LocalIndexType, GlobalIndexType > > create_default (std::shared_ptr< const Executor > exec) const
 
std::unique_ptr< Partition< LocalIndexType, GlobalIndexType > > create_default () const
 
std::unique_ptr< Partition< LocalIndexType, GlobalIndexType > > clone (std::shared_ptr< const Executor > exec) const
 
std::unique_ptr< Partition< LocalIndexType, GlobalIndexType > > clone () const
 
Partition< LocalIndexType, GlobalIndexType > * copy_from (const PolymorphicObject *other)
 
std::enable_if_t< std::is_base_of< PolymorphicObject, std::decay_t< Derived > >::value, Partition< LocalIndexType, GlobalIndexType > > * copy_from (std::unique_ptr< Derived > &&other)
 
std::enable_if_t< std::is_base_of< PolymorphicObject, std::decay_t< Derived > >::value, Partition< LocalIndexType, GlobalIndexType > > * copy_from (const std::unique_ptr< Derived > &other)
 
Partition< LocalIndexType, GlobalIndexType > * copy_from (const std::shared_ptr< const PolymorphicObject > &other)
 
Partition< LocalIndexType, GlobalIndexType > * move_from (ptr_param< PolymorphicObject > other)
 
Partition< LocalIndexType, GlobalIndexType > * clear ()
 
- 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. More...
 
std::unique_ptr< PolymorphicObjectcreate_default () const
 Creates a new "default" object of the same dynamic type as this object. More...
 
std::unique_ptr< PolymorphicObjectclone (std::shared_ptr< const Executor > exec) const
 Creates a clone of the object. More...
 
std::unique_ptr< PolymorphicObjectclone () const
 Creates a clone of the object. More...
 
PolymorphicObjectcopy_from (const PolymorphicObject *other)
 Copies another object into this object. More...
 
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. More...
 
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. More...
 
PolymorphicObjectcopy_from (const std::shared_ptr< const PolymorphicObject > &other)
 Copies another object into this object. More...
 
PolymorphicObjectmove_from (ptr_param< PolymorphicObject > other)
 Moves another object into this object. More...
 
PolymorphicObjectclear ()
 Transforms the object into its default state. More...
 
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)
 
- Public Member Functions inherited from gko::EnablePolymorphicAssignment< Partition< LocalIndexType, GlobalIndexType > >
void convert_to (result_type *result) const override
 Converts the implementer to an object of type result_type. More...
 
void move_to (result_type *result) override
 Converts the implementer to an object of type result_type by moving data from this object. More...
 
- Public Member Functions inherited from gko::ConvertibleTo< Partition< LocalIndexType, GlobalIndexType > >
void convert_to (ptr_param< result_type > result) const
 
void move_to (ptr_param< result_type > result)
 

Static Public Member Functions

static std::unique_ptr< Partitionbuild_from_mapping (std::shared_ptr< const Executor > exec, const array< comm_index_type > &mapping, comm_index_type num_parts)
 Builds a partition from a given mapping global_index -> part_id. More...
 
static std::unique_ptr< Partitionbuild_from_contiguous (std::shared_ptr< const Executor > exec, const array< global_index_type > &ranges, const array< comm_index_type > &part_ids={})
 Builds a partition consisting of contiguous ranges, one for each part. More...
 
static std::unique_ptr< Partitionbuild_from_global_size_uniform (std::shared_ptr< const Executor > exec, comm_index_type num_parts, global_index_type global_size)
 Builds a partition by evenly distributing the global range. More...
 
- Static Public Member Functions inherited from gko::EnableCreateMethod< Partition< LocalIndexType, GlobalIndexType > >
static std::unique_ptr< Partition< LocalIndexType, GlobalIndexType > > create (Args &&... args)
 

Friends

class EnableCreateMethod< Partition >
 
class EnablePolymorphicObject< Partition >
 

Detailed Description

template<typename LocalIndexType = int32, typename GlobalIndexType = int64>
class gko::experimental::distributed::Partition< LocalIndexType, GlobalIndexType >

Represents a partition of a range of indices [0, size) into a disjoint set of parts.

The partition is stored as a set of consecutive ranges [begin, end) with an associated part ID and local index (number of indices in this part before begin). Global indices are stored as 64 bit signed integers (int64), part-local indices use LocalIndexType, Part IDs use 32 bit signed integers (int).

For example, consider the interval [0, 13) that is partitioned into the following ranges:

[0,3), [3, 6), [6, 8), [8, 10), [10, 13).

These ranges are distributed on three part with:

p_0 = [0, 3) + [6, 8) + [10, 13),
p_1 = [3, 6),
p_2 = [8, 10).

The part ids can be queried from the get_part_ids array, and the ranges are represented as offsets, accessed by get_range_bounds, leading to the offset array:

r = [0, 3, 6, 8, 10, 13]

so that individual ranges are given by [r[i], r[i + 1]). Since each part may be associated with multiple ranges, it is possible to get the starting index for each range that is local to the owning part, see get_range_starting_indices. These indices can be used to easily iterate over part local data. For example, the above partition has the following starting indices

starting_index[0] = 0,
starting_index[1] = 0,
starting_index[2] = 3, // second range of part 0
starting_index[3] = 0,
starting_index[4] = 5, // third range of part 0

which you can use to iterate only over the the second range of part 0 (the third global range) with

for(int i = 0; i < r[3] - r[2]; ++i){
data[starting_index[2] + i] = val;
}
Template Parameters
LocalIndexTypeThe index type used for part-local indices. To prevent overflows, no single part's size may exceed this index type's maximum value.
GlobalIndexTypeThe index type used for the global indices. Needs to be at least as large a type as LocalIndexType.

Member Function Documentation

◆ build_from_contiguous()

template<typename LocalIndexType = int32, typename GlobalIndexType = int64>
static std::unique_ptr<Partition> gko::experimental::distributed::Partition< LocalIndexType, GlobalIndexType >::build_from_contiguous ( std::shared_ptr< const Executor exec,
const array< global_index_type > &  ranges,
const array< comm_index_type > &  part_ids = {} 
)
static

Builds a partition consisting of contiguous ranges, one for each part.

Parameters
execthe Executor on which the partition should be built
rangesthe boundaries of the ranges representing each part. Part part_id[i] contains the indices [ranges[i], ranges[i + 1]). Has to contain at least one element. The first element has to be 0.
part_idsthe part ids of the provided ranges. If empty, then it will assume range i belongs to part i.
Returns
a Partition representing the given contiguous partitioning.

◆ build_from_global_size_uniform()

template<typename LocalIndexType = int32, typename GlobalIndexType = int64>
static std::unique_ptr<Partition> gko::experimental::distributed::Partition< LocalIndexType, GlobalIndexType >::build_from_global_size_uniform ( std::shared_ptr< const Executor exec,
comm_index_type  num_parts,
global_index_type  global_size 
)
static

Builds a partition by evenly distributing the global range.

Parameters
execthe Executor on which the partition should be built
num_partsthe number of parst used in this partition
global_sizethe global size of this partition
Returns
a Partition where each range has either floor(global_size/num_parts) or floor(global_size/num_parts) + 1 indices.

◆ build_from_mapping()

template<typename LocalIndexType = int32, typename GlobalIndexType = int64>
static std::unique_ptr<Partition> gko::experimental::distributed::Partition< LocalIndexType, GlobalIndexType >::build_from_mapping ( std::shared_ptr< const Executor exec,
const array< comm_index_type > &  mapping,
comm_index_type  num_parts 
)
static

Builds a partition from a given mapping global_index -> part_id.

Parameters
execthe Executor on which the partition should be built
mappingthe mapping from global indices to part IDs.
num_partsthe number of parts used in the mapping.
Returns
a Partition representing the given mapping as a set of ranges

◆ get_num_empty_parts()

template<typename LocalIndexType = int32, typename GlobalIndexType = int64>
comm_index_type gko::experimental::distributed::Partition< LocalIndexType, GlobalIndexType >::get_num_empty_parts ( ) const
inlinenoexcept

Returns the number of empty parts within this partition.

Returns
number of empty parts.

◆ get_num_parts()

template<typename LocalIndexType = int32, typename GlobalIndexType = int64>
comm_index_type gko::experimental::distributed::Partition< LocalIndexType, GlobalIndexType >::get_num_parts ( ) const
inlinenoexcept

Returns the number of parts represented in this partition.

Returns
number of parts.

◆ get_num_ranges()

template<typename LocalIndexType = int32, typename GlobalIndexType = int64>
size_type gko::experimental::distributed::Partition< LocalIndexType, GlobalIndexType >::get_num_ranges ( ) const
inlinenoexcept

Returns the number of ranges stored by this partition.

This size refers to the data returned by get_range_bounds().

Returns
number of ranges.

References gko::array< ValueType >::get_num_elems().

◆ get_part_ids()

template<typename LocalIndexType = int32, typename GlobalIndexType = int64>
const comm_index_type* gko::experimental::distributed::Partition< LocalIndexType, GlobalIndexType >::get_part_ids ( ) const
inlinenoexcept

Returns the part IDs of the ranges in this partition.

For each range from get_range_bounds(), it stores the part ID in the interval [0, get_num_parts() - 1].

Returns
part ID array.

References gko::array< ValueType >::get_const_data().

◆ get_part_size()

template<typename LocalIndexType = int32, typename GlobalIndexType = int64>
local_index_type gko::experimental::distributed::Partition< LocalIndexType, GlobalIndexType >::get_part_size ( comm_index_type  part) const
inline

Returns the size of a part given by its part ID.

Warning
Triggers a copy from device to host.
Parameters
partthe part ID.
Returns
size of part.

References gko::array< ValueType >::get_const_data(), and gko::PolymorphicObject::get_executor().

◆ get_part_sizes()

template<typename LocalIndexType = int32, typename GlobalIndexType = int64>
const local_index_type* gko::experimental::distributed::Partition< LocalIndexType, GlobalIndexType >::get_part_sizes ( ) const
inlinenoexcept

Returns the part size array.

part_sizes[p] stores the total number of indices in part p.

Returns
part size array.

References gko::array< ValueType >::get_const_data().

◆ get_range_bounds()

template<typename LocalIndexType = int32, typename GlobalIndexType = int64>
const global_index_type* gko::experimental::distributed::Partition< LocalIndexType, GlobalIndexType >::get_range_bounds ( ) const
inlinenoexcept

Returns the ranges boundary array stored by this partition.

range_bounds[i] is the beginning (inclusive) and range_bounds[i + 1] is the end (exclusive) of the ith range.

Returns
range boundaries array.

References gko::array< ValueType >::get_const_data().

◆ get_range_starting_indices()

template<typename LocalIndexType = int32, typename GlobalIndexType = int64>
const local_index_type* gko::experimental::distributed::Partition< LocalIndexType, GlobalIndexType >::get_range_starting_indices ( ) const
inlinenoexcept

Returns the part-local starting index for each range in this partition.

Consider the partition on [0, 10) with

p_1 = [0-4) + [7-10),
p_2 = [4-7).

Then range_starting_indices[0] = 0, range_starting_indices[1] = 0, range_starting_indices[2] = 4.

Returns
part-local starting index array.

References gko::array< ValueType >::get_const_data().

◆ get_size()

template<typename LocalIndexType = int32, typename GlobalIndexType = int64>
size_type gko::experimental::distributed::Partition< LocalIndexType, GlobalIndexType >::get_size ( ) const
inline

Returns the total number of elements represented by this partition.

Returns
number elements.

◆ has_connected_parts()

template<typename LocalIndexType = int32, typename GlobalIndexType = int64>
bool gko::experimental::distributed::Partition< LocalIndexType, GlobalIndexType >::has_connected_parts ( ) const

Checks if each part has no more than one contiguous range.

Returns
true if each part has no more than one contiguous range.

◆ has_ordered_parts()

template<typename LocalIndexType = int32, typename GlobalIndexType = int64>
bool gko::experimental::distributed::Partition< LocalIndexType, GlobalIndexType >::has_ordered_parts ( ) const

Checks if the ranges are ordered by their part index.

Implies that the partition is connected.

Returns
true if the ranges are ordered by their part index.

The documentation for this class was generated from the following files: