Modules | Files | Classes | Typedefs | Functions | Variables
Memory Resources
Collaboration diagram for Memory Resources:

Modules

 Device Memory Resources
 
 Host Memory Resources
 
 Device Resource Adaptors
 

Files

file  is_resource_adaptor.hpp
 
file  pinned_host_memory_resource.hpp
 
file  resource_ref.hpp
 

Classes

class  rmm::mr::pinned_host_memory_resource
 Memory resource class for allocating pinned host memory. More...
 

Typedefs

using rmm::device_resource_ref = cuda::mr::resource_ref< cuda::mr::device_accessible >
 Alias for a cuda::mr::resource_ref with the property cuda::mr::device_accessible.
 
using rmm::device_async_resource_ref = cuda::mr::async_resource_ref< cuda::mr::device_accessible >
 Alias for a cuda::mr::async_resource_ref with the property cuda::mr::device_accessible.
 
using rmm::host_resource_ref = cuda::mr::resource_ref< cuda::mr::host_accessible >
 Alias for a cuda::mr::resource_ref with the property cuda::mr::host_accessible.
 
using rmm::host_async_resource_ref = cuda::mr::async_resource_ref< cuda::mr::host_accessible >
 Alias for a cuda::mr::async_resource_ref with the property cuda::mr::host_accessible.
 
using rmm::host_device_resource_ref = cuda::mr::resource_ref< cuda::mr::host_accessible, cuda::mr::device_accessible >
 Alias for a cuda::mr::resource_ref with the properties cuda::mr::host_accessible and cuda::mr::device_accessible.
 
using rmm::host_device_async_resource_ref = cuda::mr::async_resource_ref< cuda::mr::host_accessible, cuda::mr::device_accessible >
 Alias for a cuda::mr::async_resource_ref with the properties cuda::mr::host_accessible and cuda::mr::device_accessible.
 

Functions

device_memory_resourcermm::mr::get_per_device_resource (cuda_device_id device_id)
 Get the resource for the specified device. More...
 
device_memory_resourcermm::mr::set_per_device_resource (cuda_device_id device_id, device_memory_resource *new_mr)
 Set the device_memory_resource for the specified device. More...
 
device_memory_resourcermm::mr::get_current_device_resource ()
 Get the memory resource for the current device. More...
 
device_memory_resourcermm::mr::set_current_device_resource (device_memory_resource *new_mr)
 Set the memory resource for the current device. More...
 
device_async_resource_ref rmm::mr::get_per_device_resource_ref (cuda_device_id device_id)
 Get the device_async_resource_ref for the specified device. More...
 
device_async_resource_ref rmm::mr::set_per_device_resource_ref (cuda_device_id device_id, device_async_resource_ref new_resource_ref)
 Set the device_async_resource_ref for the specified device to new_resource_ref More...
 
device_async_resource_ref rmm::mr::get_current_device_resource_ref ()
 Get the device_async_resource_ref for the current device. More...
 
device_async_resource_ref rmm::mr::set_current_device_resource_ref (device_async_resource_ref new_resource_ref)
 Set the device_async_resource_ref for the current device. More...
 
device_async_resource_ref rmm::mr::reset_per_device_resource_ref (cuda_device_id device_id)
 Reset the device_async_resource_ref for the specified device to the initial resource. More...
 
device_async_resource_ref rmm::mr::reset_current_device_resource_ref ()
 Reset the device_async_resource_ref for the current device to the initial resource. More...
 
template<class Resource >
device_async_resource_ref rmm::to_device_async_resource_ref_checked (Resource *res)
 Convert pointer to memory resource into device_async_resource_ref, checking for nullptr More...
 

Variables

template<class Resource , class = void>
constexpr bool rmm::mr::is_resource_adaptor = false
 Concept to check whether a resource is a resource adaptor by checking for get_upstream_resource.
 

Detailed Description

Function Documentation

◆ get_current_device_resource()

device_memory_resource* rmm::mr::get_current_device_resource ( )
inline

Get the memory resource for the current device.

Returns a pointer to the resource set for the current device. The initial resource is a cuda_memory_resource.

The "current device" is the device returned by cudaGetDevice.

This function is thread-safe with respect to concurrent calls to set_per_device_resource, get_per_device_resource, get_current_device_resource, and set_current_device_resource. Concurrent calls to any of these functions will result in a valid state, but the order of execution is undefined.

Note
The returned device_memory_resource should only be used with the current CUDA device. Changing the current device (e.g. using cudaSetDevice()) and then using the returned resource can result in undefined behavior. The behavior of a device_memory_resource is undefined if used while the active CUDA device is a different device from the one that was active when the device_memory_resource was created.
Returns
Pointer to the resource for the current device

◆ get_current_device_resource_ref()

device_async_resource_ref rmm::mr::get_current_device_resource_ref ( )
inline

Get the device_async_resource_ref for the current device.

Returns the device_async_resource_ref set for the current device. The initial resource_ref references a cuda_memory_resource.

The "current device" is the device returned by cudaGetDevice.

This function is thread-safe with respect to concurrent calls to set_per_device_resource_ref, get_per_device_resource_ref, get_current_device_resource_ref, set_current_device_resource_ref and `reset_current_device_resource_ref. Concurrent calls to any of these functions will result in a valid state, but the order of execution is undefined.

Note
The returned device_async_resource_ref should only be used with the current CUDA device. Changing the current device (e.g. using cudaSetDevice()) and then using the returned resource_ref can result in undefined behavior. The behavior of a device_async_resource_ref is undefined if used while the active CUDA device is a different device from the one that was active when the memory resource was created.
Returns
device_async_resource_ref active for the current device

◆ get_per_device_resource()

device_memory_resource* rmm::mr::get_per_device_resource ( cuda_device_id  device_id)
inline

Get the resource for the specified device.

Returns a pointer to the device_memory_resource for the specified device. The initial resource is a cuda_memory_resource.

device_id.value() must be in the range [0, cudaGetDeviceCount()), otherwise behavior is undefined.

This function is thread-safe with respect to concurrent calls to set_per_device_resource, get_per_device_resource, get_current_device_resource, and set_current_device_resource. Concurrent calls to any of these functions will result in a valid state, but the order of execution is undefined.

Note
The returned device_memory_resource should only be used when CUDA device device_id is the current device (e.g. set using cudaSetDevice()). The behavior of a device_memory_resource is undefined if used while the active CUDA device is a different device from the one that was active when the device_memory_resource was created.
Parameters
device_idThe id of the target device
Returns
Pointer to the current device_memory_resource for device device_id

◆ get_per_device_resource_ref()

device_async_resource_ref rmm::mr::get_per_device_resource_ref ( cuda_device_id  device_id)
inline

Get the device_async_resource_ref for the specified device.

Returns a device_async_resource_ref for the specified device. The initial resource_ref references a cuda_memory_resource.

device_id.value() must be in the range [0, cudaGetDeviceCount()), otherwise behavior is undefined.

This function is thread-safe with respect to concurrent calls to set_per_device_resource_ref, get_per_device_resource_ref, get_current_device_resource_ref, set_current_device_resource_ref and reset_current_device_resource_ref. Concurrent calls to any of these functions will result in a valid state, but the order of execution is undefined.

Note
The returned device_async_resource_ref should only be used when CUDA device device_id is the current device (e.g. set using cudaSetDevice()). The behavior of a device_async_resource_ref is undefined if used while the active CUDA device is a different device from the one that was active when the memory resource was created.
Parameters
device_idThe id of the target device
Returns
The current device_async_resource_ref for device device_id

◆ reset_current_device_resource_ref()

device_async_resource_ref rmm::mr::reset_current_device_resource_ref ( )
inline

Reset the device_async_resource_ref for the current device to the initial resource.

Resets to a reference to the initial cuda_memory_resource. The "current device" is the device returned by cudaGetDevice.

This function is thread-safe with respect to concurrent calls to set_per_device_resource_ref, get_per_device_resource_ref, get_current_device_resource_ref, set_current_device_resource_ref and `reset_current_device_resource_ref. Concurrent calls to any of these functions will result in a valid state, but the order of execution is undefined.

Returns
Previous device_async_resource_ref for device_id

◆ reset_per_device_resource_ref()

device_async_resource_ref rmm::mr::reset_per_device_resource_ref ( cuda_device_id  device_id)
inline

Reset the device_async_resource_ref for the specified device to the initial resource.

Resets to a reference to the initial cuda_memory_resource.

device_id.value() must be in the range [0, cudaGetDeviceCount()), otherwise behavior is undefined.

This function is thread-safe with respect to concurrent calls to set_per_device_resource_ref, get_per_device_resource_ref, get_current_device_resource_ref, set_current_device_resource_ref and `reset_current_device_resource_ref. Concurrent calls to any of these functions will result in a valid state, but the order of execution is undefined.

Parameters
device_idThe id of the target device
Returns
Previous device_async_resource_ref for device_id

◆ set_current_device_resource()

device_memory_resource* rmm::mr::set_current_device_resource ( device_memory_resource new_mr)
inline

Set the memory resource for the current device.

If new_mr is not nullptr, sets the resource pointer for the current device to new_mr. Otherwise, resets the resource to the initial cuda_memory_resource.

The "current device" is the device returned by cudaGetDevice.

The object pointed to by new_mr must outlive the last use of the resource, otherwise behavior is undefined. It is the caller's responsibility to maintain the lifetime of the resource object.

This function is thread-safe with respect to concurrent calls to set_per_device_resource, get_per_device_resource, get_current_device_resource, and set_current_device_resource. Concurrent calls to any of these functions will result in a valid state, but the order of execution is undefined.

Note
The resource passed in new_mr must have been created for the current CUDA device. The behavior of a device_memory_resource is undefined if used while the active CUDA device is a different device from the one that was active when the device_memory_resource was created.
Parameters
new_mrIf not nullptr, pointer to new resource to use for the current device
Returns
Pointer to the previous resource for the current device

◆ set_current_device_resource_ref()

device_async_resource_ref rmm::mr::set_current_device_resource_ref ( device_async_resource_ref  new_resource_ref)
inline

Set the device_async_resource_ref for the current device.

The "current device" is the device returned by cudaGetDevice.

The object referenced by new_resource_ref must outlive the last use of the resource, otherwise behavior is undefined. It is the caller's responsibility to maintain the lifetime of the resource object.

This function is thread-safe with respect to concurrent calls to set_per_device_resource_ref, get_per_device_resource_ref, get_current_device_resource_ref, set_current_device_resource_ref and `reset_current_device_resource_ref. Concurrent calls to any of these functions will result in a valid state, but the order of execution is undefined.

Note
The resource passed in new_resource must have been created for the current CUDA device. The behavior of a device_async_resource_ref is undefined if used while the active CUDA device is a different device from the one that was active when the memory resource was created.
Parameters
new_resource_refNew device_async_resource_ref to use for the current device
Returns
Previous device_async_resource_ref for the current device

◆ set_per_device_resource()

device_memory_resource* rmm::mr::set_per_device_resource ( cuda_device_id  device_id,
device_memory_resource new_mr 
)
inline

Set the device_memory_resource for the specified device.

If new_mr is not nullptr, sets the memory resource pointer for the device specified by id to new_mr. Otherwise, resets ids resource to the initial cuda_memory_resource.

id.value() must be in the range [0, cudaGetDeviceCount()), otherwise behavior is undefined.

The object pointed to by new_mr must outlive the last use of the resource, otherwise behavior is undefined. It is the caller's responsibility to maintain the lifetime of the resource object.

This function is thread-safe with respect to concurrent calls to set_per_device_resource, get_per_device_resource, get_current_device_resource, and set_current_device_resource. Concurrent calls to any of these functions will result in a valid state, but the order of execution is undefined.

Note
The resource passed in new_mr must have been created when device id was the current CUDA device (e.g. set using cudaSetDevice()). The behavior of a device_memory_resource is undefined if used while the active CUDA device is a different device from the one that was active when the device_memory_resource was created.
Parameters
device_idThe id of the target device
new_mrIf not nullptr, pointer to new device_memory_resource to use as new resource for id
Returns
Pointer to the previous memory resource for id

◆ set_per_device_resource_ref()

device_async_resource_ref rmm::mr::set_per_device_resource_ref ( cuda_device_id  device_id,
device_async_resource_ref  new_resource_ref 
)
inline

Set the device_async_resource_ref for the specified device to new_resource_ref

device_id.value() must be in the range [0, cudaGetDeviceCount()), otherwise behavior is undefined.

The object referenced by new_resource_ref must outlive the last use of the resource, otherwise behavior is undefined. It is the caller's responsibility to maintain the lifetime of the resource object.

This function is thread-safe with respect to concurrent calls to set_per_device_resource_ref, get_per_device_resource_ref, get_current_device_resource_ref, set_current_device_resource_ref and `reset_current_device_resource_ref. Concurrent calls to any of these functions will result in a valid state, but the order of execution is undefined.

Note
The resource passed in new_resource_ref must have been created when device device_id was the current CUDA device (e.g. set using cudaSetDevice()). The behavior of a device_async_resource_ref is undefined if used while the active CUDA device is a different device from the one that was active when the memory resource was created.
Parameters
device_idThe id of the target device
new_resource_refnew device_async_resource_ref to use as new resource for device_id
Returns
The previous device_async_resource_ref for device_id

◆ to_device_async_resource_ref_checked()

template<class Resource >
device_async_resource_ref rmm::to_device_async_resource_ref_checked ( Resource *  res)

Convert pointer to memory resource into device_async_resource_ref, checking for nullptr

Template Parameters
ResourceThe type of the memory resource.
Parameters
resA pointer to the memory resource.
Returns
A device_async_resource_ref to the memory resource.
Exceptions
std::logic_errorif the memory resource pointer is null.