Public Member Functions | Friends | List of all members
rmm::mr::system_memory_resource Class Referencefinal

Memory resource that uses malloc/free for allocation/deallocation. More...

#include <system_memory_resource.hpp>

Public Member Functions

 system_memory_resource (system_memory_resource const &)=default
 Default copy constructor.
 
 system_memory_resource (system_memory_resource &&)=default
 Default copy constructor.
 
system_memory_resourceoperator= (system_memory_resource const &)=default
 Default copy assignment operator. More...
 
system_memory_resourceoperator= (system_memory_resource &&)=default
 Default move assignment operator. More...
 
void * allocate ([[maybe_unused]] cuda::stream_ref stream, std::size_t bytes, [[maybe_unused]] std::size_t alignment=rmm::CUDA_ALLOCATION_ALIGNMENT)
 Allocates memory of size at least bytes. More...
 
void deallocate (cuda::stream_ref stream, void *ptr, std::size_t bytes, [[maybe_unused]] std::size_t alignment=rmm::CUDA_ALLOCATION_ALIGNMENT) noexcept
 Deallocate memory pointed to by ptr. More...
 
void * allocate_sync (std::size_t bytes, std::size_t alignment=rmm::CUDA_ALLOCATION_ALIGNMENT)
 Allocates memory of size at least bytes synchronously. More...
 
void deallocate_sync (void *ptr, std::size_t bytes, std::size_t alignment=rmm::CUDA_ALLOCATION_ALIGNMENT) noexcept
 Deallocate memory pointed to by ptr synchronously. More...
 
bool operator== (system_memory_resource const &) const noexcept
 Compare this resource to another. More...
 
bool operator!= (system_memory_resource const &) const noexcept
 Compare this resource to another. More...
 

Friends

void get_property (system_memory_resource const &, cuda::mr::device_accessible) noexcept
 Enables the cuda::mr::device_accessible property. More...
 
void get_property (system_memory_resource const &, cuda::mr::host_accessible) noexcept
 Enables the cuda::mr::host_accessible property. More...
 

Detailed Description

Memory resource that uses malloc/free for allocation/deallocation.

There are two flavors of hardware/software environments that support accessing system allocated memory (SAM) from the GPU: HMM and ATS.

Heterogeneous Memory Management (HMM) is a software-based solution for PCIe-connected GPUs on x86 systems. Requirements:

For more information, see https://developer.nvidia.com/blog/simplifying-gpu-application-development-with-heterogeneous-memory-management/.

Address Translation Services (ATS) is a hardware/software solution for the Grace Hopper Superchip that uses the NVLink Chip-2-Chip (C2C) interconnect to provide coherent memory. For more information, see https://developer.nvidia.com/blog/nvidia-grace-hopper-superchip-architecture-in-depth/.

Member Function Documentation

◆ allocate()

void* rmm::mr::system_memory_resource::allocate ( [[maybe_unused] ] cuda::stream_ref  stream,
std::size_t  bytes,
[[maybe_unused] ] std::size_t  alignment = rmm::CUDA_ALLOCATION_ALIGNMENT 
)
inline

Allocates memory of size at least bytes.

The returned pointer will have at minimum 256 byte alignment.

The stream argument is ignored.

Parameters
streamThis argument is ignored
bytesThe size of the allocation
alignmentThe alignment of the allocation
Returns
void* Pointer to the newly allocated memory

◆ allocate_sync()

void* rmm::mr::system_memory_resource::allocate_sync ( std::size_t  bytes,
std::size_t  alignment = rmm::CUDA_ALLOCATION_ALIGNMENT 
)
inline

Allocates memory of size at least bytes synchronously.

Parameters
bytesThe size of the allocation
alignmentThe alignment of the allocation
Returns
void* Pointer to the newly allocated memory

◆ deallocate()

void rmm::mr::system_memory_resource::deallocate ( cuda::stream_ref  stream,
void *  ptr,
std::size_t  bytes,
[[maybe_unused] ] std::size_t  alignment = rmm::CUDA_ALLOCATION_ALIGNMENT 
)
inlinenoexcept

Deallocate memory pointed to by ptr.

This function synchronizes the stream before deallocating the memory.

Parameters
streamThe stream in which to order this deallocation
ptrPointer to be deallocated
bytesThe size in bytes of the allocation. This must be equal to the value of bytes that was passed to the allocate call that returned ptr.
alignmentThe alignment that was passed to the allocate call that returned ptr

◆ deallocate_sync()

void rmm::mr::system_memory_resource::deallocate_sync ( void *  ptr,
std::size_t  bytes,
std::size_t  alignment = rmm::CUDA_ALLOCATION_ALIGNMENT 
)
inlinenoexcept

Deallocate memory pointed to by ptr synchronously.

Parameters
ptrPointer to be deallocated
bytesThe size in bytes of the allocation
alignmentThe alignment that was passed to the allocate call that returned ptr

◆ operator!=()

bool rmm::mr::system_memory_resource::operator!= ( system_memory_resource const &  ) const
inlinenoexcept

Compare this resource to another.

All instances of system_memory_resource are equivalent.

Returns
true Always

◆ operator=() [1/2]

system_memory_resource& rmm::mr::system_memory_resource::operator= ( system_memory_resource &&  )
default

Default move assignment operator.

Returns
system_memory_resource& Reference to the assigned object

◆ operator=() [2/2]

system_memory_resource& rmm::mr::system_memory_resource::operator= ( system_memory_resource const &  )
default

Default copy assignment operator.

Returns
system_memory_resource& Reference to the assigned object

◆ operator==()

bool rmm::mr::system_memory_resource::operator== ( system_memory_resource const &  ) const
inlinenoexcept

Compare this resource to another.

All instances of system_memory_resource are equivalent.

Returns
true Always

Friends And Related Function Documentation

◆ get_property [1/2]

void get_property ( system_memory_resource const &  ,
cuda::mr::device_accessible   
)
friend

Enables the cuda::mr::device_accessible property.

This property declares that a system_memory_resource provides device-accessible memory

◆ get_property [2/2]

void get_property ( system_memory_resource const &  ,
cuda::mr::host_accessible   
)
friend

Enables the cuda::mr::host_accessible property.

This property declares that a system_memory_resource provides host-accessible memory


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