system_memory_resource.hpp
Go to the documentation of this file.
1 /*
2  * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION.
3  * SPDX-License-Identifier: Apache-2.0
4  */
5 #pragma once
6 
7 #include <rmm/aligned.hpp>
8 #include <rmm/cuda_device.hpp>
9 #include <rmm/detail/export.hpp>
10 
11 #include <cuda/memory_resource>
12 #include <cuda/stream_ref>
13 #include <cuda_runtime_api.h>
14 
15 #include <cstddef>
16 
17 namespace RMM_NAMESPACE {
18 namespace mr {
19 
20 namespace detail {
27 RMM_EXPORT bool is_system_memory_supported(cuda_device_id device_id);
28 } // namespace detail
29 
57 class RMM_EXPORT system_memory_resource final {
58  public:
60  ~system_memory_resource() = default;
64  default;
66  default;
67 
80  void* allocate([[maybe_unused]] cuda::stream_ref stream,
81  std::size_t bytes,
82  std::size_t alignment = rmm::CUDA_ALLOCATION_ALIGNMENT);
83 
95  void deallocate(cuda::stream_ref stream,
96  void* ptr,
97  std::size_t bytes,
98  std::size_t alignment = rmm::CUDA_ALLOCATION_ALIGNMENT) noexcept;
99 
107  void* allocate_sync(std::size_t bytes, std::size_t alignment = rmm::CUDA_ALLOCATION_ALIGNMENT);
108 
116  void deallocate_sync(void* ptr,
117  std::size_t bytes,
118  std::size_t alignment = rmm::CUDA_ALLOCATION_ALIGNMENT) noexcept;
119 
125  RMM_CONSTEXPR_FRIEND void get_property(system_memory_resource const&,
126  cuda::mr::device_accessible) noexcept
127  {
128  }
129 
135  RMM_CONSTEXPR_FRIEND void get_property(system_memory_resource const&,
136  cuda::mr::host_accessible) noexcept
137  {
138  }
139 
147  [[nodiscard]] bool operator==(system_memory_resource const&) const noexcept;
148 
152  [[nodiscard]] bool operator!=(system_memory_resource const&) const noexcept;
153 };
154 
155 // static property checks
156 static_assert(cuda::mr::synchronous_resource<system_memory_resource>);
157 static_assert(cuda::mr::resource<system_memory_resource>);
158 static_assert(
159  cuda::mr::synchronous_resource_with<system_memory_resource, cuda::mr::device_accessible>);
160 static_assert(
161  cuda::mr::synchronous_resource_with<system_memory_resource, cuda::mr::host_accessible>);
162 static_assert(cuda::mr::resource_with<system_memory_resource, cuda::mr::device_accessible>);
163 static_assert(cuda::mr::resource_with<system_memory_resource, cuda::mr::host_accessible>); // end of group
165 } // namespace mr
166 } // namespace RMM_NAMESPACE
Memory resource that uses malloc/free for allocation/deallocation.
Definition: system_memory_resource.hpp:57
system_memory_resource(system_memory_resource const &)=default
Default copy constructor.
system_memory_resource(system_memory_resource &&)=default
Default copy constructor.
system_memory_resource & operator=(system_memory_resource const &)=default
Default copy assignment operator.
bool operator==(system_memory_resource const &) const noexcept
Compare this resource to another.
friend void get_property(system_memory_resource const &, cuda::mr::device_accessible) noexcept
Enables the cuda::mr::device_accessible property.
Definition: system_memory_resource.hpp:125
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.
void deallocate(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!=(system_memory_resource const &) const noexcept
Compare this resource to another.
void * allocate_sync(std::size_t bytes, std::size_t alignment=rmm::CUDA_ALLOCATION_ALIGNMENT)
Allocates memory of size at least bytes synchronously.
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.
friend void get_property(system_memory_resource const &, cuda::mr::host_accessible) noexcept
Enables the cuda::mr::host_accessible property.
Definition: system_memory_resource.hpp:135
system_memory_resource & operator=(system_memory_resource &&)=default
Default move assignment operator.
static constexpr std::size_t CUDA_ALLOCATION_ALIGNMENT
Default alignment used for CUDA memory allocation.
Definition: aligned.hpp:25
Strong type for a CUDA device identifier.
Definition: cuda_device.hpp:27
bool is_system_memory_supported(cuda_device_id device_id)
Check if system allocated memory (SAM) is supported on the specified device.