Resource that uses Upstream
to allocate memory and tracks allocations.
More...
#include <tracking_resource_adaptor.hpp>
Classes | |
struct | allocation_info |
Information stored about an allocation. Includes the size and a stack trace if the tracking_resource_adaptor was initialized to capture stacks. More... | |
Public Types | |
using | read_lock_t = std::shared_lock< std::shared_timed_mutex > |
Type of lock used to synchronize read access. | |
using | write_lock_t = std::unique_lock< std::shared_timed_mutex > |
Type of lock used to synchronize write access. | |
Public Member Functions | |
tracking_resource_adaptor (Upstream *upstream, bool capture_stacks=false) | |
Construct a new tracking resource adaptor using upstream to satisfy allocation requests. More... | |
tracking_resource_adaptor (tracking_resource_adaptor const &)=delete | |
tracking_resource_adaptor (tracking_resource_adaptor &&) noexcept=default | |
Default move constructor. | |
tracking_resource_adaptor & | operator= (tracking_resource_adaptor const &)=delete |
tracking_resource_adaptor & | operator= (tracking_resource_adaptor &&) noexcept=default |
Default move assignment operator. More... | |
Upstream * | get_upstream () const noexcept |
Pointer to the upstream resource. More... | |
bool | supports_streams () const noexcept override |
Checks whether the upstream resource supports streams. More... | |
bool | supports_get_mem_info () const noexcept override |
Query whether the resource supports the get_mem_info API. More... | |
std::map< void *, allocation_info > const & | get_outstanding_allocations () const noexcept |
Get the outstanding allocations map. More... | |
std::size_t | get_allocated_bytes () const noexcept |
Query the number of bytes that have been allocated. Note that this can not be used to know how large of an allocation is possible due to both possible fragmentation and also internal page sizes and alignment that is not tracked by this allocator. More... | |
std::string | get_outstanding_allocations_str () const |
Gets a string containing the outstanding allocation pointers, their size, and optionally the stack trace for when each pointer was allocated. More... | |
void | log_outstanding_allocations () const |
Log any outstanding allocations via RMM_LOG_DEBUG. | |
![]() | |
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... | |
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... | |
Resource that uses Upstream
to allocate memory and tracks allocations.
An instance of this resource can be constructed with an existing, upstream resource in order to satisfy allocation requests, but any existing allocations will be untracked. Tracking stores a size and pointer for every allocation, and a stack frame if capture_stacks
is true, so it can add significant overhead. tracking_resource_adaptor
is intended as a debug adaptor and shouldn't be used in performance-sensitive code. Note that callstacks may not contain all symbols unless the project is linked with -rdynamic
. This can be accomplished with add_link_options(-rdynamic)
in cmake.
Upstream | Type of the upstream resource used for allocation/deallocation. |
|
inline |
Construct a new tracking resource adaptor using upstream
to satisfy allocation requests.
<tt>rmm::logic_error</tt> | if upstream == nullptr |
upstream | The resource used for allocating/deallocating device memory |
capture_stacks | If true, capture stacks for allocation calls |
|
inlinenoexcept |
Query the number of bytes that have been allocated. Note that this can not be used to know how large of an allocation is possible due to both possible fragmentation and also internal page sizes and alignment that is not tracked by this allocator.
|
inlinenoexcept |
Get the outstanding allocations map.
|
inline |
Gets a string containing the outstanding allocation pointers, their size, and optionally the stack trace for when each pointer was allocated.
Stack traces are only included if this resource adaptor was created with capture_stack == true
. Otherwise, outstanding allocation pointers will be shown with their size and empty stack traces.
|
inlinenoexcept |
Pointer to the upstream resource.
|
defaultnoexcept |
Default move assignment operator.
|
inlineoverridevirtualnoexcept |
Query whether the resource supports the get_mem_info API.
Implements rmm::mr::device_memory_resource.
|
inlineoverridevirtualnoexcept |
Checks whether the upstream resource supports streams.
Implements rmm::mr::device_memory_resource.