Distributed Ranges
Loading...
Searching...
No Matches
duplicated_vector.hpp
1// SPDX-FileCopyrightText: Intel Corporation
2//
3// SPDX-License-Identifier: BSD-3-Clause
4
5#pragma once
6
7#include <dr/sp/allocators.hpp>
8#include <dr/sp/device_vector.hpp>
9
10namespace dr::sp {
11
12template <typename T, typename Allocator = dr::sp::device_allocator<T>>
14public:
16
17 using value_type = T;
18 using size_type = std::size_t;
19 using difference_type = std::ptrdiff_t;
20
21 using allocator_type = Allocator;
22
23 duplicated_vector(std::size_t count = 0) {
24 size_ = count;
25 capacity_ = count;
26
27 std::size_t rank = 0;
28 for (auto &&device : dr::sp::devices()) {
29 segments_.emplace_back(
30 segment_type(size(), Allocator(dr::sp::context(), device), rank++));
31 }
32 }
33
34 size_type size() const noexcept { return size_; }
35
36 segment_type &local_vector(std::size_t rank) { return segments_[rank]; }
37
38 const segment_type &local_vector(std::size_t rank) const {
39 return segments_[rank];
40 }
41
42private:
43 std::vector<segment_type> segments_;
44 std::size_t capacity_ = 0;
45 std::size_t size_ = 0;
46};
47
48} // namespace dr::sp
Definition: device_vector.hpp:13
Definition: duplicated_vector.hpp:13