Ginkgo  Generated from pipelines/2017069469 branch based on develop. Ginkgo version 1.11.0
A numerical linear algebra library targeting many-core architectures
vector_cache.hpp
1 // SPDX-FileCopyrightText: 2017 - 2025 The Ginkgo authors
2 //
3 // SPDX-License-Identifier: BSD-3-Clause
4 
5 #ifndef GKO_PUBLIC_CORE_DISTRIBUTED_VECTOR_CACHE_HPP_
6 #define GKO_PUBLIC_CORE_DISTRIBUTED_VECTOR_CACHE_HPP_
7 
8 
9 #include <memory>
10 
11 #include <ginkgo/config.hpp>
12 #include <ginkgo/core/base/executor.hpp>
13 #include <ginkgo/core/base/mpi.hpp>
14 #include <ginkgo/core/distributed/vector.hpp>
15 
16 
17 #if GINKGO_BUILD_MPI
18 
19 
20 namespace gko {
21 namespace experimental {
22 namespace distributed {
23 namespace detail {
24 
25 
35 template <typename ValueType>
36 class VectorCache {
37 public:
38  VectorCache() = default;
39  ~VectorCache() = default;
40  VectorCache(const VectorCache&) {}
41  VectorCache(VectorCache&&) noexcept {}
42  VectorCache& operator=(const VectorCache&) { return *this; }
43  VectorCache& operator=(VectorCache&&) noexcept { return *this; }
44  mutable std::unique_ptr<Vector<ValueType>> vec{};
45 
46 
61  void init_from(const Vector<ValueType>* template_vec) const;
62 
75  void init(std::shared_ptr<const Executor> exec,
76  gko::experimental::mpi::communicator comm, dim<2> global_size,
77  dim<2> local_size) const;
78 
84  Vector<ValueType>& operator*() const { return *vec; }
85 
90  Vector<ValueType>* operator->() const { return vec.get(); }
91 
96  Vector<ValueType>* get() const { return vec.get(); }
97 };
98 
99 
100 // helper to access private member for testing
101 class GenericVectorCacheAccessor;
102 
103 
114 class GenericVectorCache {
115 public:
116  friend class GenericVectorCacheAccessor;
117 
118  GenericVectorCache() = default;
119  ~GenericVectorCache() = default;
120  GenericVectorCache(const GenericVectorCache&);
121  GenericVectorCache(GenericVectorCache&&) noexcept;
122  GenericVectorCache& operator=(const GenericVectorCache&);
123  GenericVectorCache& operator=(GenericVectorCache&&) noexcept;
124 
140  template <typename ValueType>
141  std::shared_ptr<Vector<ValueType>> get(
142  std::shared_ptr<const Executor> exec,
143  gko::experimental::mpi::communicator comm, dim<2> global_size,
144  dim<2> local_size) const;
145 
146 private:
147  mutable array<char> workspace;
148 };
149 
150 
151 } // namespace detail
152 } // namespace distributed
153 } // namespace experimental
154 } // namespace gko
155 
156 
157 #endif // GINKGO_BUILD_MPI
158 #endif // GKO_PUBLIC_CORE_DISTRIBUTED_VECTOR_CACHE_HPP_
gko
The Ginkgo namespace.
Definition: abstract_factory.hpp:20
gko::experimental::mpi::communicator
A thin wrapper of MPI_Comm that supports most MPI calls.
Definition: mpi.hpp:419