Classes | Public Types | Public Member Functions | List of all members
rmm::mr::tracking_resource_adaptor< Upstream > Class Template Referencefinal

Resource that uses Upstream to allocate memory and tracks allocations. More...

#include <tracking_resource_adaptor.hpp>

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

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_adaptoroperator= (tracking_resource_adaptor const &)=delete
 
tracking_resource_adaptoroperator= (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.
 
- 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...
 

Detailed Description

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

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.

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

Constructor & Destructor Documentation

◆ tracking_resource_adaptor()

template<typename Upstream >
rmm::mr::tracking_resource_adaptor< Upstream >::tracking_resource_adaptor ( Upstream *  upstream,
bool  capture_stacks = false 
)
inline

Construct a new tracking resource adaptor using upstream to satisfy allocation requests.

Exceptions
rmm::logic_errorif upstream == nullptr
Parameters
upstreamThe resource used for allocating/deallocating device memory
capture_stacksIf true, capture stacks for allocation calls

Member Function Documentation

◆ get_allocated_bytes()

template<typename Upstream >
std::size_t rmm::mr::tracking_resource_adaptor< Upstream >::get_allocated_bytes ( ) const
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.

Returns
std::size_t number of bytes that have been allocated through this allocator.

◆ get_outstanding_allocations()

template<typename Upstream >
std::map<void*, allocation_info> const& rmm::mr::tracking_resource_adaptor< Upstream >::get_outstanding_allocations ( ) const
inlinenoexcept

Get the outstanding allocations map.

Returns
std::map<void*, allocation_info> const& of a map of allocations. The key is the allocated memory pointer and the data is the allocation_info structure, which contains size and, potentially, stack traces.

◆ get_outstanding_allocations_str()

template<typename Upstream >
std::string rmm::mr::tracking_resource_adaptor< Upstream >::get_outstanding_allocations_str ( ) const
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.

Returns
std::string Containing the outstanding allocation pointers.

◆ get_upstream()

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

Pointer to the upstream resource.

Returns
Pointer to the upstream resource

◆ operator=()

template<typename Upstream >
tracking_resource_adaptor& rmm::mr::tracking_resource_adaptor< Upstream >::operator= ( tracking_resource_adaptor< Upstream > &&  )
defaultnoexcept

Default move assignment operator.

Returns
tracking_resource_adaptor& Reference to the assigned object

◆ supports_get_mem_info()

template<typename Upstream >
bool rmm::mr::tracking_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::tracking_resource_adaptor< Upstream >::supports_streams ( ) const
inlineoverridevirtualnoexcept

Checks whether the upstream resource supports streams.

Returns
true The upstream resource supports streams
false The upstream resource does not support streams.

Implements rmm::mr::device_memory_resource.


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