Resource that uses system memory resource to allocate memory with a headroom. More...
#include <sam_headroom_memory_resource.hpp>


Public Member Functions | |
| sam_headroom_memory_resource (std::size_t headroom) | |
| Construct a headroom memory resource. More... | |
| sam_headroom_memory_resource (sam_headroom_memory_resource const &)=default | |
| Default copy constructor. | |
| sam_headroom_memory_resource (sam_headroom_memory_resource &&)=default | |
| Default move constructor. | |
| sam_headroom_memory_resource & | operator= (sam_headroom_memory_resource const &)=default |
| Default copy assignment operator. More... | |
| sam_headroom_memory_resource & | operator= (sam_headroom_memory_resource &&)=default |
| Default move assignment operator. More... | |
Friends | |
| void | get_property (sam_headroom_memory_resource const &, cuda::mr::device_accessible) noexcept |
Enables the cuda::mr::device_accessible property. | |
| void | get_property (sam_headroom_memory_resource const &, cuda::mr::host_accessible) noexcept |
Enables the cuda::mr::host_accessible property. | |
Resource that uses system memory resource to allocate memory with a headroom.
System allocated memory (SAM) can be migrated to the GPU, but is never migrated back the host. If GPU memory is over-subscribed, this can cause other CUDA calls to fail with out-of-memory errors. To work around this problem, when using a system memory resource, we reserve some GPU memory as headroom for other CUDA calls, and only conditionally set its preferred location to the GPU if the allocation would not eat into the headroom.
Since doing this check on every allocation can be expensive, the caller may choose to use other allocators (e.g. binning_memory_resource) for small allocations, and use this allocator for large allocations only.
|
explicit |
Construct a headroom memory resource.
| headroom | Size of the reserved GPU memory as headroom |
|
default |
Default move assignment operator.
|
default |
Default copy assignment operator.