Ginkgo Generated from branch based on main. Ginkgo version 1.10.0
A numerical linear algebra library targeting many-core architectures
Loading...
Searching...
No Matches
segmented_array.hpp
1// SPDX-FileCopyrightText: 2017 - 2025 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
15namespace gko {
16
26template <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
103
110
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
139private:
140 gko::array<T> buffer_;
141 gko::array<int64> offsets_;
142};
143
144
145namespace detail {
146
147
148template <typename T>
149struct 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>>(std::move(exec), *ptr);
156 } else {
157 return std::unique_ptr<segmented_array<T>>(
159 array<int64>(std::move(exec), ptr->get_offsets()))));
160 }
161 }
162};
163
164template <typename T>
165struct temporary_clone_helper<const segmented_array<T>> {
166 static std::unique_ptr<const segmented_array<T>> create(
167 std::shared_ptr<const Executor> exec, const segmented_array<T>* ptr,
168 bool)
169 {
170 return std::make_unique<segmented_array<T>>(std::move(exec), *ptr);
171 }
172};
173
174
175template <typename T>
176class copy_back_deleter<segmented_array<T>>
177 : public copy_back_deleter_from_assignment<segmented_array<T>> {
178public:
179 using copy_back_deleter_from_assignment<
180 segmented_array<T>>::copy_back_deleter_from_assignment;
181};
182
183
184} // namespace detail
185} // namespace gko
186
187#endif // GKO_PUBLIC_CORE_BASE_SEGMENTED_ARRAY_HPP_
The first step in using the Ginkgo library consists of creating an executor.
Definition executor.hpp:615
An array is a container which encapsulates fixed-sized arrays, stored on the Executor tied to the arr...
Definition array.hpp:166
The Ginkgo namespace.
Definition abstract_factory.hpp:20
std::int64_t int64
64-bit signed integral type.
Definition types.hpp:113
std::size_t size_type
Integral type used for allocation quantities.
Definition types.hpp:90
STL namespace.
const T * get_const_flat_data() const
Const-access to the flat buffer.
segmented_array(std::shared_ptr< const Executor > exec, const segmented_array &other)
Copies a segmented array to a different executor.
static segmented_array create_from_offsets(gko::array< T > buffer, gko::array< int64 > offsets)
Creates a segmented array from a flat buffer and offsets.
segmented_array(std::shared_ptr< const Executor > exec)
Create an empty segmented array.
static segmented_array create_from_sizes(gko::array< T > buffer, const gko::array< int64 > &sizes)
Creates a segmented array from a flat buffer and segment sizes.
size_type get_segment_count() const
Get the number of segments.
segmented_array(std::shared_ptr< const Executor > exec, segmented_array &&other)
Moves a segmented array to a different executor.
T * get_flat_data()
Access to the flat buffer.
size_type get_size() const
Get the total size of the stored buffer.
std::shared_ptr< const Executor > get_executor() const
Access the executor.
static segmented_array create_from_sizes(const gko::array< int64 > &sizes)
Creates an uninitialized segmented array with predefined segment sizes.
const gko::array< int64 > & get_offsets() const
Access to the segment offsets.
static segmented_array create_from_offsets(gko::array< int64 > offsets)
Creates an uninitialized segmented array from offsets.