pinned_host_vector.hpp
Go to the documentation of this file.
1 /*
2  * SPDX-FileCopyrightText: Copyright (c) 2021-2025, NVIDIA CORPORATION.
3  * SPDX-License-Identifier: Apache-2.0
4  */
5 
6 #pragma once
7 
8 #include <rmm/mr/pinned_host_memory_resource.hpp>
9 
10 namespace ML {
11 
12 template <typename T>
14  public:
15  pinned_host_vector() = default;
16 
17  explicit pinned_host_vector(std::size_t n)
18  : size_{n}, data_{static_cast<T*>(pinned_mr.allocate_sync(n * sizeof(T)))}
19  {
20  std::uninitialized_fill(data_, data_ + n, static_cast<T>(0));
21  }
22  ~pinned_host_vector() { pinned_mr.deallocate_sync(data_, size_ * sizeof(T)); }
23 
28 
29  void resize(std::size_t n)
30  {
31  size_ = n;
32  data_ = static_cast<T*>(pinned_mr.allocate_sync(n * sizeof(T)));
33  std::uninitialized_fill(data_, data_ + n, static_cast<T>(0));
34  }
35 
36  T* data() { return data_; }
37 
38  T* begin() { return data_; }
39 
40  T* end() { return data_ + size_; }
41 
42  std::size_t size() { return size_; }
43 
44  T operator[](std::size_t idx) const { return *(data_ + idx); }
45  T& operator[](std::size_t idx) { return *(data_ + idx); }
46 
47  private:
48  rmm::mr::pinned_host_memory_resource pinned_mr{};
49  T* data_;
50  std::size_t size_;
51 };
52 
53 } // namespace ML
Definition: pinned_host_vector.hpp:13
pinned_host_vector & operator=(pinned_host_vector &&)=delete
T & operator[](std::size_t idx)
Definition: pinned_host_vector.hpp:45
pinned_host_vector()=default
T * begin()
Definition: pinned_host_vector.hpp:38
pinned_host_vector(pinned_host_vector const &)=delete
T operator[](std::size_t idx) const
Definition: pinned_host_vector.hpp:44
void resize(std::size_t n)
Definition: pinned_host_vector.hpp:29
T * end()
Definition: pinned_host_vector.hpp:40
T * data()
Definition: pinned_host_vector.hpp:36
pinned_host_vector(std::size_t n)
Definition: pinned_host_vector.hpp:17
pinned_host_vector(pinned_host_vector &&)=delete
std::size_t size()
Definition: pinned_host_vector.hpp:42
~pinned_host_vector()
Definition: pinned_host_vector.hpp:22
pinned_host_vector & operator=(pinned_host_vector const &)=delete
Definition: dbscan.hpp:18