5 #ifndef GKO_PUBLIC_CORE_DISTRIBUTED_ROW_GATHERER_HPP_
6 #define GKO_PUBLIC_CORE_DISTRIBUTED_ROW_GATHERER_HPP_
9 #include <ginkgo/config.hpp>
15 #include <ginkgo/core/base/dense_cache.hpp>
16 #include <ginkgo/core/base/event.hpp>
17 #include <ginkgo/core/base/lin_op.hpp>
18 #include <ginkgo/core/base/mpi.hpp>
19 #include <ginkgo/core/distributed/base.hpp>
20 #include <ginkgo/core/distributed/collective_communicator.hpp>
21 #include <ginkgo/core/distributed/index_map.hpp>
25 namespace experimental {
26 namespace distributed {
29 template <
typename LocalIndexType>
37 template <
typename LocalIndexType>
38 std::shared_ptr<const gko::detail::Event> apply_prepare(
42 template <
typename LocalIndexType>
43 std::shared_ptr<const gko::detail::Event> apply_prepare(
45 gko::detail::GenericDenseCache& workspace);
48 template <
typename LocalIndexType>
51 std::shared_ptr<const gko::detail::Event>);
54 template <
typename LocalIndexType>
57 std::shared_ptr<const gko::detail::Event>,
58 gko::detail::GenericDenseCache& workspace);
90 template <
typename LocalIndexType =
int32>
95 template <
typename ValueT,
typename LocalIndexT,
typename GlobalIndexT>
98 friend std::shared_ptr<const gko::detail::Event>
99 detail::apply_prepare<LocalIndexType>(
const RowGatherer* rg,
101 friend std::shared_ptr<const gko::detail::Event> detail::apply_prepare<
103 gko::detail::GenericDenseCache& workspace);
104 friend mpi::request detail::apply_finalize<LocalIndexType>(
106 std::shared_ptr<const gko::detail::Event>);
107 friend mpi::request detail::apply_finalize<LocalIndexType>(
109 std::shared_ptr<const gko::detail::Event>,
110 gko::detail::GenericDenseCache& workspace);
151 gko::detail::GenericDenseCache& workspace)
const;
161 std::shared_ptr<const mpi::CollectiveCommunicator>
194 template <
typename GlobalIndexType =
int64,
195 typename = std::enable_if_t<
sizeof(GlobalIndexType) >=
196 sizeof(LocalIndexType)>>
197 static std::unique_ptr<RowGatherer>
create(
198 std::shared_ptr<const Executor> exec,
199 std::shared_ptr<const mpi::CollectiveCommunicator> coll_comm,
202 return std::unique_ptr<RowGatherer>(
203 new RowGatherer(std::move(exec), std::move(coll_comm), imap));
209 static std::unique_ptr<RowGatherer>
create(
228 static std::unique_ptr<RowGatherer>
create(
229 std::shared_ptr<const Executor> exec,
230 std::shared_ptr<const mpi::CollectiveCommunicator> coll_comm_template);
241 std::shared_ptr<const gko::detail::Event> apply_prepare(
244 std::shared_ptr<const gko::detail::Event> apply_prepare(
246 gko::detail::GenericDenseCache& workspace)
const;
250 std::shared_ptr<const gko::detail::Event>)
const;
254 std::shared_ptr<const gko::detail::Event>,
255 gko::detail::GenericDenseCache& workspace)
const;
263 template <
typename GlobalIndexType>
265 std::shared_ptr<const mpi::CollectiveCommunicator> coll_comm,
279 std::shared_ptr<const Executor> exec,
280 std::shared_ptr<const mpi::CollectiveCommunicator> coll_comm_template);
283 std::shared_ptr<const mpi::CollectiveCommunicator> coll_comm_;
285 mutable gko::detail::GenericDenseCache send_cache_;
294 #endif // GKO_PUBLIC_CORE_DISTRIBUTED_ROW_GATHERER_HPP_