Ginkgo  Generated from pipelines/1589998975 branch based on develop. Ginkgo version 1.10.0
A numerical linear algebra library targeting many-core architectures
segmented_array.hpp
1 // SPDX-FileCopyrightText: 2017 - 2024 The Ginkgo authors
2 //
3 // SPDX-License-Identifier: BSD-3-Clause
4 
5 #ifndef GKO_PUBLIC_CORE_BASE_SEGMENTED_ARRAY_HPP_
6 #define GKO_PUBLIC_CORE_BASE_SEGMENTED_ARRAY_HPP_
7 
8 
9 #include <numeric>
10 
11 #include <ginkgo/config.hpp>
12 #include <ginkgo/core/base/array.hpp>
13 
14 
15 namespace gko {
16 
26 template <typename T>
33  explicit segmented_array(std::shared_ptr<const Executor> exec);
34 
42 
50  const gko::array<int64>& sizes);
51 
59 
69  gko::array<int64> offsets);
70 
77  segmented_array(std::shared_ptr<const Executor> exec,
78  const segmented_array& other);
79 
86  segmented_array(std::shared_ptr<const Executor> exec,
87  segmented_array&& other);
88 
89  segmented_array(const segmented_array& other);
90 
91  segmented_array(segmented_array&& other) noexcept(false);
92 
93  segmented_array& operator=(const segmented_array& other);
94 
95  segmented_array& operator=(segmented_array&&) noexcept(false);
96 
102  size_type get_size() const;
103 
110 
116  T* get_flat_data();
117 
123  const T* get_const_flat_data() const;
124 
130  const gko::array<int64>& get_offsets() const;
131 
137  std::shared_ptr<const Executor> get_executor() const;
138 
139 private:
140  gko::array<T> buffer_;
141  gko::array<int64> offsets_;
142 };
143 
144 
145 namespace detail {
146 
147 
148 template <typename T>
149 struct temporary_clone_helper<segmented_array<T>> {
150  static std::unique_ptr<segmented_array<T>> create(
151  std::shared_ptr<const Executor> exec, segmented_array<T>* ptr,
152  bool copy_data)
153  {
154  if (copy_data) {
155  return std::make_unique<segmented_array<T>>(
156  make_array_view(exec, ptr->get_size(), ptr->get_flat_data()),
157  ptr->get_offsets());
158  } else {
159  return std::make_unique<segmented_array<T>>(std::move(exec),
160  ptr->get_offsets());
161  }
162  }
163 };
164 
165 template <typename T>
166 struct temporary_clone_helper<const segmented_array<T>> {
167  static std::unique_ptr<const segmented_array<T>> create(
168  std::shared_ptr<const Executor> exec, const segmented_array<T>* ptr,
169  bool)
170  {
171  return std::make_unique<segmented_array<T>>(
172  make_array_view(exec, ptr->get_size(), ptr->get_const_flat_data()),
173  ptr->get_offsets());
174  }
175 };
176 
177 
178 template <typename T>
179 class copy_back_deleter<segmented_array<T>>
180  : public copy_back_deleter_from_assignment<segmented_array<T>> {
181 public:
182  using copy_back_deleter_from_assignment<
183  segmented_array<T>>::copy_back_deleter_from_assignment;
184 };
185 
186 
187 } // namespace detail
188 } // namespace gko
189 
190 #endif // GKO_PUBLIC_CORE_BASE_SEGMENTED_ARRAY_HPP_
gko::segmented_array::segmented_array
segmented_array(std::shared_ptr< const Executor > exec)
Create an empty segmented array.
gko::size_type
std::size_t size_type
Integral type used for allocation quantities.
Definition: types.hpp:89
gko::segmented_array::create_from_offsets
static segmented_array create_from_offsets(gko::array< int64 > offsets)
Creates an uninitialized segmented array from offsets.
gko::segmented_array::create_from_sizes
static segmented_array create_from_sizes(const gko::array< int64 > &sizes)
Creates an uninitialized segmented array with predefined segment sizes.
gko::segmented_array::get_flat_data
T * get_flat_data()
Access to the flat buffer.
gko::segmented_array::get_offsets
const gko::array< int64 > & get_offsets() const
Access to the segment offsets.
gko::segmented_array::get_segment_count
size_type get_segment_count() const
Get the number of segments.
gko
The Ginkgo namespace.
Definition: abstract_factory.hpp:20
gko::segmented_array::get_size
size_type get_size() const
Get the total size of the stored buffer.
gko::array< int64 >
gko::segmented_array::get_const_flat_data
const T * get_const_flat_data() const
Const-access to the flat buffer.
gko::segmented_array::get_executor
std::shared_ptr< const Executor > get_executor() const
Access the executor.
gko::segmented_array
A minimal interface for a segmented array.
Definition: segmented_array.hpp:27
gko::make_array_view
array< ValueType > make_array_view(std::shared_ptr< const Executor > exec, size_type size, ValueType *data)
Helper function to create an array view deducing the value type.
Definition: array.hpp:787