使用系统内存资源分配带预留空间的内存的资源。 更多...
#include <sam_headroom_memory_resource.hpp>
公有成员函数 | |
sam_headroom_memory_resource (std::size_t headroom) | |
构造一个带预留空间的内存资源。 更多... | |
sam_headroom_memory_resource (sam_headroom_memory_resource const &)=delete | |
sam_headroom_memory_resource (sam_headroom_memory_resource &&)=delete | |
sam_headroom_memory_resource & | operator= (sam_headroom_memory_resource const &)=delete |
sam_headroom_memory_resource & | operator= (sam_headroom_memory_resource &&)=delete |
![]() | |
device_memory_resource (device_memory_resource const &)=default | |
默认拷贝构造函数。 | |
device_memory_resource (device_memory_resource &&) noexcept=default | |
默认移动构造函数。 | |
device_memory_resource & | operator= (device_memory_resource const &)=default |
默认拷贝赋值运算符。 更多... | |
device_memory_resource & | operator= (device_memory_resource &&) noexcept=default |
默认移动赋值运算符。 更多... | |
void * | allocate (std::size_t bytes, cuda_stream_view stream=cuda_stream_view{}) |
分配至少 bytes 大小的内存。 更多... | |
void | deallocate (void *ptr, std::size_t bytes, cuda_stream_view stream=cuda_stream_view{}) |
释放 p 指向的内存。 更多... | |
bool | is_equal (device_memory_resource const &other) const noexcept |
比较此资源与另一个资源。 更多... | |
void * | allocate (std::size_t bytes, std::size_t alignment) |
分配至少 bytes 大小的内存。 更多... | |
void | deallocate (void *ptr, std::size_t bytes, std::size_t alignment) |
释放 p 指向的内存。 更多... | |
void * | allocate_async (std::size_t bytes, std::size_t alignment, cuda_stream_view stream) |
分配至少 bytes 大小的内存。 更多... | |
void * | allocate_async (std::size_t bytes, cuda_stream_view stream) |
分配至少 bytes 大小的内存。 更多... | |
void | deallocate_async (void *ptr, std::size_t bytes, std::size_t alignment, cuda_stream_view stream) |
释放 p 指向的内存。 更多... | |
void | deallocate_async (void *ptr, std::size_t bytes, cuda_stream_view stream) |
释放 p 指向的内存。 更多... | |
bool | operator== (device_memory_resource const &other) const noexcept |
与另一个 device_memory_resource 的比较运算符。 更多... | |
bool | operator!= (device_memory_resource const &other) const noexcept |
与另一个 device_memory_resource 的比较运算符。 更多... | |
使用系统内存资源分配带预留空间的内存的资源。
系统分配的内存(SAM)可以迁移到 GPU,但绝不会迁移回主机。如果 GPU 内存被超额订阅,这可能导致其他 CUDA 调用因内存不足错误而失败。为了解决此问题,在使用系统内存资源时,我们会预留一些 GPU 内存作为其他 CUDA 调用的预留空间 (headroom),并且只有在分配不会占用这部分预留空间时,才会条件性地将其首选位置设置为 GPU。
由于在每次分配时进行此检查可能开销很大,调用者可以选择对小额分配使用其他分配器(例如 binning_memory_resource),而仅对大额分配使用此分配器。
|
内联显式 |
构造一个带预留空间的内存资源。
headroom | 预留的 GPU 内存作为预留空间 (headroom) 的大小 |