9 #include <rmm/detail/export.hpp>
18 namespace RMM_NAMESPACE {
66 void* do_allocate(std::size_t bytes, [[maybe_unused]]
cuda_stream_view stream)
override
71 auto const allocatable = free > headroom_ ? free - headroom_ : 0UL;
72 auto const gpu_portion =
74 auto const cpu_portion = bytes - gpu_portion;
76 if (gpu_portion != 0) {
77 #if defined(CUDART_VERSION) && CUDART_VERSION >= 13000
80 cudaMemAdvise(pointer, gpu_portion, cudaMemAdviseSetPreferredLocation, location));
82 RMM_CUDA_TRY(cudaMemAdvise(pointer,
84 cudaMemAdviseSetPreferredLocation,
88 if (cpu_portion != 0) {
89 #if defined(CUDART_VERSION) && CUDART_VERSION >= 13000
90 cudaMemLocation location{cudaMemLocationTypeHost, 0};
91 RMM_CUDA_TRY(cudaMemAdvise(
static_cast<char*
>(pointer) + gpu_portion,
93 cudaMemAdviseSetPreferredLocation,
96 RMM_CUDA_TRY(cudaMemAdvise(
static_cast<char*
>(pointer) + gpu_portion,
98 cudaMemAdviseSetPreferredLocation,
115 void do_deallocate(
void* ptr,
116 [[maybe_unused]] std::size_t bytes,
117 [[maybe_unused]] cuda_stream_view stream) noexcept
override
129 [[nodiscard]]
bool do_is_equal(device_memory_resource
const& other)
const noexcept
override
131 if (
this == std::addressof(other)) {
return true; }
132 auto cast =
dynamic_cast<sam_headroom_memory_resource const*
>(&other);
133 if (cast ==
nullptr) {
return false; }
134 return headroom_ == cast->headroom_;
138 system_memory_resource system_mr_;
140 std::size_t headroom_;
Strongly-typed non-owning wrapper for CUDA streams with default constructor.
Definition: cuda_stream_view.hpp:28
Base class for all librmm device memory allocation.
Definition: device_memory_resource.hpp:83
void * allocate(cuda_stream_view stream, std::size_t bytes, std::size_t alignment=rmm::CUDA_ALLOCATION_ALIGNMENT)
Allocates memory of size at least bytes on the specified stream.
Definition: device_memory_resource.hpp:153
Resource that uses system memory resource to allocate memory with a headroom.
Definition: sam_headroom_memory_resource.hpp:38
sam_headroom_memory_resource(std::size_t headroom)
Construct a headroom memory resource.
Definition: sam_headroom_memory_resource.hpp:45
std::pair< std::size_t, std::size_t > available_device_memory()
Returns the available and total device memory in bytes for the current device.
cuda_device_id get_current_cuda_device()
Returns a cuda_device_id for the current device.
static constexpr std::size_t CUDA_ALLOCATION_ALIGNMENT
Default alignment used for CUDA memory allocation.
Definition: aligned.hpp:25
std::size_t align_down(std::size_t value, std::size_t alignment) noexcept
Align down to the nearest multiple of specified power of 2.
constexpr value_type value() const noexcept
The wrapped integer value.
Definition: cuda_device.hpp:43