Public Member Functions | Static Public Attributes | List of all members
rmm::mr::aligned_resource_adaptor< Upstream > Class Template Referencefinal

Resource that adapts Upstream memory resource to allocate memory in a specified alignment size. More...

#include <aligned_resource_adaptor.hpp>

Inheritance diagram for rmm::mr::aligned_resource_adaptor< Upstream >:
Inheritance graph
[legend]
Collaboration diagram for rmm::mr::aligned_resource_adaptor< Upstream >:
Collaboration graph
[legend]

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_adaptoroperator= (aligned_resource_adaptor const &)=delete
 
aligned_resource_adaptoroperator= (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_resourceoperator= (device_memory_resource const &)=default
 Default copy assignment operator. More...
 
device_memory_resourceoperator= (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.
 

Detailed Description

template<typename Upstream>
class rmm::mr::aligned_resource_adaptor< Upstream >

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.

Template Parameters
UpstreamType of the upstream resource used for allocation/deallocation.

Constructor & Destructor Documentation

◆ aligned_resource_adaptor()

template<typename Upstream >
rmm::mr::aligned_resource_adaptor< Upstream >::aligned_resource_adaptor ( Upstream *  upstream,
std::size_t  alignment = rmm::detail::CUDA_ALLOCATION_ALIGNMENT,
std::size_t  alignment_threshold = default_alignment_threshold 
)
inlineexplicit

Construct an aligned resource adaptor using upstream to satisfy allocation requests.

Exceptions
rmm::logic_errorif upstream == nullptr
rmm::logic_errorif allocation_alignment is not a power of 2
Parameters
upstreamThe resource used for allocating/deallocating device memory.
alignmentThe size used for allocation alignment.
alignment_thresholdOnly allocations with a size larger than or equal to this threshold are aligned.

Member Function Documentation

◆ get_upstream()

template<typename Upstream >
Upstream* rmm::mr::aligned_resource_adaptor< Upstream >::get_upstream ( ) const
inlinenoexcept

Get the upstream memory resource.

Returns
Upstream* pointer to a memory resource object.

◆ supports_get_mem_info()

template<typename Upstream >
bool rmm::mr::aligned_resource_adaptor< Upstream >::supports_get_mem_info ( ) const
inlineoverridevirtualnoexcept

Query whether the resource supports the get_mem_info API.

Returns
bool true if the upstream resource supports get_mem_info, false otherwise.

Implements rmm::mr::device_memory_resource.

◆ supports_streams()

template<typename Upstream >
bool rmm::mr::aligned_resource_adaptor< Upstream >::supports_streams ( ) const
inlineoverridevirtualnoexcept

Query whether the resource supports use of non-null CUDA streams for allocation/deallocation.

Returns
bool true if the resource supports non-null CUDA streams.

Implements rmm::mr::device_memory_resource.


The documentation for this class was generated from the following file: