RMM
23.12
RAPIDS Memory Manager
|
Resource that adapts Upstream
memory resource to allocate memory in a specified alignment size.
More...
#include <aligned_resource_adaptor.hpp>
Public Member Functions | |
aligned_resource_adaptor (Upstream *upstream, std::size_t alignment=rmm::detail::CUDA_ALLOCATION_ALIGNMENT, std::size_t alignment_threshold=default_alignment_threshold) | |
Construct an aligned resource adaptor using upstream to satisfy allocation requests. More... | |
aligned_resource_adaptor (aligned_resource_adaptor const &)=delete | |
aligned_resource_adaptor (aligned_resource_adaptor &&)=delete | |
aligned_resource_adaptor & | operator= (aligned_resource_adaptor const &)=delete |
aligned_resource_adaptor & | operator= (aligned_resource_adaptor &&)=delete |
Upstream * | get_upstream () const noexcept |
Get the upstream memory resource. More... | |
bool | supports_streams () const noexcept override |
Query whether the resource supports use of non-null CUDA streams for allocation/deallocation. More... | |
bool | supports_get_mem_info () const noexcept override |
Query whether the resource supports the get_mem_info API. More... | |
Public Member Functions inherited from rmm::mr::device_memory_resource | |
device_memory_resource (device_memory_resource const &)=default | |
Default copy constructor. | |
device_memory_resource (device_memory_resource &&) noexcept=default | |
Default move constructor. | |
device_memory_resource & | operator= (device_memory_resource const &)=default |
Default copy assignment operator. More... | |
device_memory_resource & | operator= (device_memory_resource &&) noexcept=default |
Default move assignment operator. More... | |
void * | allocate (std::size_t bytes, cuda_stream_view stream=cuda_stream_view{}) |
Allocates memory of size at least bytes . More... | |
void | deallocate (void *ptr, std::size_t bytes, cuda_stream_view stream=cuda_stream_view{}) |
Deallocate memory pointed to by p . More... | |
bool | is_equal (device_memory_resource const &other) const noexcept |
Compare this resource to another. More... | |
void * | allocate (std::size_t bytes, std::size_t alignment) |
Allocates memory of size at least bytes . More... | |
void | deallocate (void *ptr, std::size_t bytes, std::size_t alignment) |
Deallocate memory pointed to by p . More... | |
void * | allocate_async (std::size_t bytes, std::size_t alignment, cuda_stream_view stream) |
Allocates memory of size at least bytes . More... | |
void * | allocate_async (std::size_t bytes, cuda_stream_view stream) |
Allocates memory of size at least bytes . More... | |
void | deallocate_async (void *ptr, std::size_t bytes, std::size_t alignment, cuda_stream_view stream) |
Deallocate memory pointed to by p . More... | |
void | deallocate_async (void *ptr, std::size_t bytes, cuda_stream_view stream) |
Deallocate memory pointed to by p . More... | |
bool | operator== (device_memory_resource const &other) const noexcept |
Comparison operator with another device_memory_resource. More... | |
bool | operator!= (device_memory_resource const &other) const noexcept |
Comparison operator with another device_memory_resource. More... | |
std::pair< std::size_t, std::size_t > | get_mem_info (cuda_stream_view stream) const |
Queries the amount of free and total memory for the resource. More... | |
Static Public Attributes | |
static constexpr std::size_t | default_alignment_threshold = 0 |
The default alignment used by the adaptor. | |
Resource that adapts Upstream
memory resource to allocate memory in a specified alignment size.
An instance of this resource can be constructed with an existing, upstream resource in order to satisfy allocation requests. This adaptor wraps allocations and deallocations from Upstream using the given alignment size.
By default, any address returned by one of the memory allocation routines from the CUDA driver or runtime API is always aligned to at least 256 bytes. For some use cases, such as GPUDirect Storage (GDS), allocations need to be aligned to a larger size (4 KiB for GDS) in order to avoid additional copies to bounce buffers.
Since a larger alignment size has some additional overhead, the user can specify a threshold size. If an allocation's size falls below the threshold, it is aligned to the default size. Only allocations with a size above the threshold are aligned to the custom alignment size.
Upstream | Type of the upstream resource used for allocation/deallocation. |
|
inlineexplicit |
Construct an aligned resource adaptor using upstream
to satisfy allocation requests.
rmm::logic_error | if upstream == nullptr |
rmm::logic_error | if allocation_alignment is not a power of 2 |
upstream | The resource used for allocating/deallocating device memory. |
alignment | The size used for allocation alignment. |
alignment_threshold | Only allocations with a size larger than or equal to this threshold are aligned. |
|
inlinenoexcept |
Get the upstream memory resource.
|
inlineoverridevirtualnoexcept |
Query whether the resource supports the get_mem_info API.
Implements rmm::mr::device_memory_resource.
|
inlineoverridevirtualnoexcept |
Query whether the resource supports use of non-null CUDA streams for allocation/deallocation.
Implements rmm::mr::device_memory_resource.