managed_memory_resource.hpp
Go to the documentation of this file.
1 /*
2  * SPDX-FileCopyrightText: Copyright (c) 2019-2026, NVIDIA CORPORATION.
3  * SPDX-License-Identifier: Apache-2.0
4  */
5 #pragma once
6 
7 #include <rmm/aligned.hpp>
8 #include <rmm/detail/export.hpp>
9 
10 #include <cuda/memory_resource>
11 #include <cuda/stream_ref>
12 
13 #include <cstddef>
14 
15 namespace RMM_NAMESPACE {
16 namespace mr {
25 class RMM_EXPORT managed_memory_resource final {
26  public:
27  managed_memory_resource() = default;
28  ~managed_memory_resource() = default;
32  default;
34  default;
35 
48  void* allocate([[maybe_unused]] cuda::stream_ref stream,
49  std::size_t bytes,
50  std::size_t alignment = rmm::CUDA_ALLOCATION_ALIGNMENT);
51 
63  void deallocate([[maybe_unused]] cuda::stream_ref stream,
64  void* ptr,
65  std::size_t bytes,
66  std::size_t alignment = rmm::CUDA_ALLOCATION_ALIGNMENT) noexcept;
67 
75  void* allocate_sync(std::size_t bytes, std::size_t alignment = rmm::CUDA_ALLOCATION_ALIGNMENT);
76 
84  void deallocate_sync(void* ptr,
85  std::size_t bytes,
86  std::size_t alignment = rmm::CUDA_ALLOCATION_ALIGNMENT) noexcept;
87 
93  RMM_CONSTEXPR_FRIEND void get_property(managed_memory_resource const&,
94  cuda::mr::device_accessible) noexcept
95  {
96  }
97 
103  RMM_CONSTEXPR_FRIEND void get_property(managed_memory_resource const&,
104  cuda::mr::host_accessible) noexcept
105  {
106  }
107 
115  [[nodiscard]] bool operator==(managed_memory_resource const&) const noexcept;
116 
120  [[nodiscard]] bool operator!=(managed_memory_resource const&) const noexcept;
121 };
122 
123 // static property checks
124 static_assert(cuda::mr::synchronous_resource<managed_memory_resource>);
125 static_assert(cuda::mr::resource<managed_memory_resource>);
126 static_assert(
127  cuda::mr::synchronous_resource_with<managed_memory_resource, cuda::mr::device_accessible>);
128 static_assert(
129  cuda::mr::synchronous_resource_with<managed_memory_resource, cuda::mr::host_accessible>);
130 static_assert(cuda::mr::resource_with<managed_memory_resource, cuda::mr::device_accessible>);
131 static_assert(cuda::mr::resource_with<managed_memory_resource, cuda::mr::host_accessible>);
132  // end of group
134 } // namespace mr
135 } // namespace RMM_NAMESPACE
Memory resource that uses cudaMallocManaged/Free for allocation/deallocation.
Definition: managed_memory_resource.hpp:25
void * allocate([[maybe_unused]] cuda::stream_ref stream, std::size_t bytes, std::size_t alignment=rmm::CUDA_ALLOCATION_ALIGNMENT)
Allocates memory of size at least bytes.
managed_memory_resource(managed_memory_resource &&)=default
Default move constructor.
void * allocate_sync(std::size_t bytes, std::size_t alignment=rmm::CUDA_ALLOCATION_ALIGNMENT)
Allocates memory of size at least bytes synchronously.
bool operator==(managed_memory_resource const &) const noexcept
Compare this resource to another.
friend void get_property(managed_memory_resource const &, cuda::mr::host_accessible) noexcept
Enables the cuda::mr::host_accessible property.
Definition: managed_memory_resource.hpp:103
friend void get_property(managed_memory_resource const &, cuda::mr::device_accessible) noexcept
Enables the cuda::mr::device_accessible property.
Definition: managed_memory_resource.hpp:93
void deallocate_sync(void *ptr, std::size_t bytes, std::size_t alignment=rmm::CUDA_ALLOCATION_ALIGNMENT) noexcept
Deallocate memory pointed to by ptr synchronously.
managed_memory_resource & operator=(managed_memory_resource &&)=default
Default move assignment operator.
managed_memory_resource & operator=(managed_memory_resource const &)=default
Default copy assignment operator.
void deallocate([[maybe_unused]] cuda::stream_ref stream, void *ptr, std::size_t bytes, std::size_t alignment=rmm::CUDA_ALLOCATION_ALIGNMENT) noexcept
Deallocate memory pointed to by ptr.
bool operator!=(managed_memory_resource const &) const noexcept
Compare this resource to another.
managed_memory_resource(managed_memory_resource const &)=default
Default copy constructor.
static constexpr std::size_t CUDA_ALLOCATION_ALIGNMENT
Default alignment used for CUDA memory allocation.
Definition: aligned.hpp:25