Ginkgo
Generated from pipelines/1330831941 branch based on master. Ginkgo version 1.8.0
A numerical linear algebra library targeting many-core architectures
|
The distributed namespace. More...
Namespaces | |
preconditioner | |
The Preconditioner namespace. | |
Classes | |
class | DistributedBase |
A base class for distributed objects. More... | |
struct | index_map |
This class defines mappings between global and local indices. More... | |
class | Matrix |
The Matrix class defines a (MPI-)distributed matrix. More... | |
class | Partition |
Represents a partition of a range of indices [0, size) into a disjoint set of parts. More... | |
class | Vector |
Vector is a format which explicitly stores (multiple) distributed column vectors in a dense storage format. More... | |
Typedefs | |
using | comm_index_type = int |
Index type for enumerating processes in a distributed application. More... | |
Enumerations | |
enum | index_space { index_space::local, index_space::non_local, index_space::combined } |
Index space classification for the locally stored indices. More... | |
Functions | |
template<typename ValueType > | |
detail::temporary_conversion< experimental::distributed::Vector< ValueType > > | make_temporary_conversion (LinOp *matrix) |
Convert the given LinOp from experimental::distributed::Vector<...> to experimental::distributed::Vector<ValueType>. More... | |
template<typename ValueType > | |
detail::temporary_conversion< const experimental::distributed::Vector< ValueType > > | make_temporary_conversion (const LinOp *matrix) |
Convert the given LinOp from experimental::distributed::Vector<...> to experimental::distributed::Vector<ValueType>. More... | |
template<typename ValueType , typename Function , typename... Args> | |
void | precision_dispatch (Function fn, Args *... linops) |
Calls the given function with each given argument LinOp temporarily converted into experimental::distributed::Vector<ValueType> as parameters. More... | |
template<typename ValueType , typename Function > | |
void | precision_dispatch_real_complex (Function fn, const LinOp *in, LinOp *out) |
Calls the given function with the given LinOps temporarily converted to experimental::distributed::Vector<ValueType>* as parameters. More... | |
template<typename ValueType , typename Function > | |
void | precision_dispatch_real_complex (Function fn, const LinOp *alpha, const LinOp *in, LinOp *out) |
Calls the given function with the given LinOps temporarily converted to experimental::distributed::Vector<ValueType>* as parameters. More... | |
template<typename ValueType , typename Function > | |
void | precision_dispatch_real_complex (Function fn, const LinOp *alpha, const LinOp *in, const LinOp *beta, LinOp *out) |
Calls the given function with the given LinOps temporarily converted to experimental::distributed::Vector<ValueType>* as parameters. More... | |
template<typename LocalIndexType , typename GlobalIndexType > | |
std::unique_ptr< Partition< LocalIndexType, GlobalIndexType > > | build_partition_from_local_range (std::shared_ptr< const Executor > exec, mpi::communicator comm, span local_range) |
Builds a partition from a local range. More... | |
template<typename LocalIndexType , typename GlobalIndexType > | |
std::unique_ptr< Partition< LocalIndexType, GlobalIndexType > > | build_partition_from_local_size (std::shared_ptr< const Executor > exec, mpi::communicator comm, size_type local_size) |
Builds a partition from a local size. More... | |
The distributed namespace.
using gko::experimental::distributed::comm_index_type = typedef int |
Index type for enumerating processes in a distributed application.
Conforms to the MPI C interface of e.g. MPI rank or size
|
strong |
Index space classification for the locally stored indices.
The definitions of the enum values is clarified in index_map.
Enumerator | |
---|---|
local | indices that are locally owned |
non_local | indices that are owned by other processes |
combined | both local and non_local indices |
std::unique_ptr<Partition<LocalIndexType, GlobalIndexType> > gko::experimental::distributed::build_partition_from_local_range | ( | std::shared_ptr< const Executor > | exec, |
mpi::communicator | comm, | ||
span | local_range | ||
) |
Builds a partition from a local range.
exec | the Executor on which the partition should be built. |
comm | the communicator used to determine the global partition. |
local_range | the start and end indices of the local range. |
n
every local range r_i = [s_i, e_i)
either s_i != 0
and another local range r_j = [s_j, e_j = s_i)
exists, or e_i != n
and another local range r_j = [s_j = e_i, e_j)
exists.std::unique_ptr<Partition<LocalIndexType, GlobalIndexType> > gko::experimental::distributed::build_partition_from_local_size | ( | std::shared_ptr< const Executor > | exec, |
mpi::communicator | comm, | ||
size_type | local_size | ||
) |
Builds a partition from a local size.
exec | the Executor on which the partition should be built. |
comm | the communicator used to determine the global partition. |
local_range | the number of the locally owned indices |
s_i
, then the range i
has size s_i
, and range r_i = [start, start + s_i)
, where start = sum_j^(i-1) s_j
. detail::temporary_conversion<const experimental::distributed::Vector<ValueType> > gko::experimental::distributed::make_temporary_conversion | ( | const LinOp * | matrix | ) |
Convert the given LinOp from experimental::distributed::Vector<...> to experimental::distributed::Vector<ValueType>.
The conversion tries to convert the input LinOp to all Dense types with value type recursively reachable by next_precision<...> starting from the ValueType template parameter. This means that all real-to-real and complex-to-complex conversions for default precisions are being considered. If the input matrix is non-const, the contents of the modified converted object will be converted back to the input matrix when the returned object is destroyed. This may lead to a loss of precision!
matrix | the input matrix which is supposed to be converted. It is wrapped unchanged if it is already of type experimental::distributed::Vector<ValueType>, otherwise it will be converted to this type if possible. |
NotSupported | if the input matrix cannot be converted to experimental::distributed::Vector<ValueType> |
ValueType | the value type into whose associated experimental::distributed::Vector type to convert the input LinOp. |
detail::temporary_conversion<experimental::distributed::Vector<ValueType> > gko::experimental::distributed::make_temporary_conversion | ( | LinOp * | matrix | ) |
Convert the given LinOp from experimental::distributed::Vector<...> to experimental::distributed::Vector<ValueType>.
The conversion tries to convert the input LinOp to all Dense types with value type recursively reachable by next_precision<...> starting from the ValueType template parameter. This means that all real-to-real and complex-to-complex conversions for default precisions are being considered. If the input matrix is non-const, the contents of the modified converted object will be converted back to the input matrix when the returned object is destroyed. This may lead to a loss of precision!
matrix | the input matrix which is supposed to be converted. It is wrapped unchanged if it is already of type experimental::distributed::Vector<ValueType>, otherwise it will be converted to this type if possible. |
NotSupported | if the input matrix cannot be converted to experimental::distributed::Vector<ValueType> |
ValueType | the value type into whose associated experimental::distributed::Vector type to convert the input LinOp. |
void gko::experimental::distributed::precision_dispatch | ( | Function | fn, |
Args *... | linops | ||
) |
Calls the given function with each given argument LinOp temporarily converted into experimental::distributed::Vector<ValueType> as parameters.
fn | the given function. It will be passed one (potentially const) experimental::distributed::Vector<ValueType>* parameter per parameter in the parameter pack linops . |
linops | the given arguments to be converted and passed on to fn. |
ValueType | the value type to use for the parameters of fn . |
Function | the function pointer, lambda or other functor type to call with the converted arguments. |
Args | the argument type list. |
void gko::experimental::distributed::precision_dispatch_real_complex | ( | Function | fn, |
const LinOp * | alpha, | ||
const LinOp * | in, | ||
const LinOp * | beta, | ||
LinOp * | out | ||
) |
Calls the given function with the given LinOps temporarily converted to experimental::distributed::Vector<ValueType>* as parameters.
If ValueType is real and both input vectors are complex, uses experimental::distributed::Vector::get_real_view() to convert them into real matrices after precision conversion.
void gko::experimental::distributed::precision_dispatch_real_complex | ( | Function | fn, |
const LinOp * | alpha, | ||
const LinOp * | in, | ||
LinOp * | out | ||
) |
Calls the given function with the given LinOps temporarily converted to experimental::distributed::Vector<ValueType>* as parameters.
If ValueType is real and both input vectors are complex, uses experimental::distributed::Vector::get_real_view() to convert them into real matrices after precision conversion.
void gko::experimental::distributed::precision_dispatch_real_complex | ( | Function | fn, |
const LinOp * | in, | ||
LinOp * | out | ||
) |
Calls the given function with the given LinOps temporarily converted to experimental::distributed::Vector<ValueType>* as parameters.
If ValueType is real and both input vectors are complex, uses experimental::distributed::Vector::get_real_view() to convert them into real matrices after precision conversion.