20 #include <rmm/detail/export.hpp>
28 namespace RMM_NAMESPACE {
84 void* do_allocate(std::size_t bytes, [[maybe_unused]]
cuda_stream_view stream)
override
89 auto const allocatable = free > headroom_ ? free - headroom_ : 0UL;
90 auto const gpu_portion =
92 auto const cpu_portion = bytes - gpu_portion;
93 if (gpu_portion != 0) {
94 RMM_CUDA_TRY(cudaMemAdvise(pointer,
96 cudaMemAdviseSetPreferredLocation,
99 if (cpu_portion != 0) {
100 RMM_CUDA_TRY(cudaMemAdvise(
static_cast<char*
>(pointer) + gpu_portion,
102 cudaMemAdviseSetPreferredLocation,
118 void do_deallocate(
void* ptr,
119 [[maybe_unused]] std::size_t bytes,
120 [[maybe_unused]] cuda_stream_view stream)
override
132 [[nodiscard]]
bool do_is_equal(device_memory_resource
const& other)
const noexcept
override
134 if (
this == &other) {
return true; }
135 auto cast =
dynamic_cast<sam_headroom_memory_resource const*
>(&other);
136 if (cast ==
nullptr) {
return false; }
137 return headroom_ == cast->headroom_;
141 system_memory_resource system_mr_;
143 std::size_t headroom_;
定义: cuda_stream_view.hpp:39
rmm::mr::device_memory_resource
所有 librmm 设备内存分配的基类。
rmm::mr::device_memory_resource::allocate_async
void * allocate_async(std::size_t bytes, std::size_t alignment, cuda_stream_view stream)
分配至少 bytes 大小的内存。