Ginkgo: ginkgo/core/distributed/collective_communicator.hpp Source File

| Ginkgo Generated from branch based on main. Ginkgo version 1.11.0 A numerical linear algebra library targeting many-core architectures

Loading...
Searching...
No Matches
collective_communicator.hpp
1// SPDX-FileCopyrightText: 2017 - 2025 The Ginkgo authors
2//
3// SPDX-License-Identifier: BSD-3-Clause
4
5#ifndef GKO_PUBLIC_CORE_DISTRIBUTED_COLLECTIVE_COMMUNICATOR_HPP_
6#define GKO_PUBLIC_CORE_DISTRIBUTED_COLLECTIVE_COMMUNICATOR_HPP_
7
8
9#include <ginkgo/config.hpp>
10
11
12#if GINKGO_BUILD_MPI
13
14#include <variant>
15
16#include <ginkgo/core/base/mpi.hpp>
17#include <ginkgo/core/distributed/index_map.hpp>
18
19
20namespace gko {
21namespace experimental {
22namespace mpi {
23
24
31 class CollectiveCommunicator {
32public:
36 using index_map_ptr =
37 std::variant<const distributed::index_map<int32, int32>*,
38 const distributed::index_map<int32, int64>*,
39 const distributed::index_map<int64, int64>*>;
40
41 virtual ~CollectiveCommunicator() = default;
42
43 explicit CollectiveCommunicator(communicator base = MPI_COMM_NULL);
44
45 [[nodiscard]] const communicator& get_base_communicator() const;
46
63 template <typename SendType, typename RecvType>
64 [[nodiscard]] request i_all_to_all_v(std::shared_ptr<const Executor> exec,
65 const SendType* send_buffer,
66 RecvType* recv_buffer) const;
67
72 request i_all_to_all_v(std::shared_ptr<const Executor> exec,
73 const void* send_buffer, MPI_Datatype send_type,
74 void* recv_buffer, MPI_Datatype recv_type) const;
75
84 [[nodiscard]] virtual std::unique_ptr<CollectiveCommunicator>
85 create_with_same_type(communicator base, index_map_ptr imap) const = 0;
86
94 [[nodiscard]] virtual std::unique_ptr<CollectiveCommunicator>
95 create_inverse() const = 0;
96
103 [[nodiscard]] virtual comm_index_type get_recv_size() const = 0;
104
111 [[nodiscard]] virtual comm_index_type get_send_size() const = 0;
112
113protected:
114 virtual request i_all_to_all_v_impl(std::shared_ptr<const Executor> exec,
115 const void* send_buffer,
116 MPI_Datatype send_type,
117 void* recv_buffer,
118 MPI_Datatype recv_type) const = 0;
119
120private:
121 communicator base_;
122};
123
124
125template <typename SendType, typename RecvType>
126 request CollectiveCommunicator::i_all_to_all_v(
127 std::shared_ptr<const Executor> exec, const SendType* send_buffer,
128 RecvType* recv_buffer) const
129{
130 return this->i_all_to_all_v(std::move(exec), send_buffer,
131 type_impl<SendType>::get_type(), recv_buffer,
132 type_impl<RecvType>::get_type());
133}
134
135
136namespace detail {
137
138
147std::shared_ptr<CollectiveCommunicator> create_default_collective_communicator(
148 communicator base);
149
150
151} // namespace detail
152} // namespace mpi
153} // namespace experimental
154} // namespace gko
155
156
157#endif
158#endif // GKO_PUBLIC_CORE_DISTRIBUTED_COLLECTIVE_COMMUNICATOR_HPP_
gko::experimental::distributed::index_map
This class defines mappings between global and local indices.
Definition index_map.hpp:68
gko::experimental::mpi::CollectiveCommunicator::index_map_ptr
std::variant< const distributed::index_map< int32, int32 > *, const distributed::index_map< int32, int64 > *, const distributed::index_map< int64, int64 > * > index_map_ptr
All allowed index_map types (as const *).
Definition collective_communicator.hpp:36
gko::experimental::mpi::CollectiveCommunicator::create_inverse
virtual std::unique_ptr< CollectiveCommunicator > create_inverse() const =0
Creates a CollectiveCommunicator with the inverse communication pattern than this object.
gko::experimental::mpi::CollectiveCommunicator::get_recv_size
virtual comm_index_type get_recv_size() const =0
Get the number of elements received by this process within this communication pattern.
gko::experimental::mpi::CollectiveCommunicator::i_all_to_all_v
request i_all_to_all_v(std::shared_ptr< const Executor > exec, const void *send_buffer, MPI_Datatype send_type, void *recv_buffer, MPI_Datatype recv_type) const
gko::experimental::mpi::CollectiveCommunicator::i_all_to_all_v
request i_all_to_all_v(std::shared_ptr< const Executor > exec, const SendType *send_buffer, RecvType *recv_buffer) const
Non-blocking all-to-all communication.
Definition collective_communicator.hpp:126
gko::experimental::mpi::CollectiveCommunicator::create_with_same_type
virtual std::unique_ptr< CollectiveCommunicator > create_with_same_type(communicator base, index_map_ptr imap) const =0
Creates a new CollectiveCommunicator with the same dynamic type.
gko::experimental::mpi::CollectiveCommunicator::get_send_size
virtual comm_index_type get_send_size() const =0
Get the number of elements sent by this process within this communication pattern.
gko::experimental::mpi::communicator
A thin wrapper of MPI_Comm that supports most MPI calls.
Definition mpi.hpp:419
gko::experimental::mpi::request
The request class is a light, move-only wrapper around the MPI_Request handle.
Definition mpi.hpp:331
gko::experimental::mpi
The mpi namespace, contains wrapper for many MPI functions.
Definition mpi.hpp:36
gko::experimental::mpi::comm_index_type
int comm_index_type
Index type for enumerating processes in a distributed application.
Definition types.hpp:1124
gko
The Ginkgo namespace.
Definition abstract_factory.hpp:20
gko::experimental::mpi::type_impl
A struct that is used to determine the MPI_Datatype of a specified type.
Definition mpi.hpp:77