| 公共类型 | 公共成员函数 | 所有成员列表
rmm::mr::tracking_resource_adaptor< Upstream > 类模板参考final

使用 Upstream 分配内存并跟踪分配的资源。更多...

#include <tracking_resource_adaptor.hpp>

rmm::mr::tracking_resource_adaptor< Upstream > 的继承图
Inheritance graph
[图例]
rmm::mr::tracking_resource_adaptor< Upstream > 的协作图
Collaboration graph
[图例]

结构体  allocation_info
 存储有关分配的信息。包括分配大小以及在 tracking_resource_adaptor 初始化为捕获堆栈时提供的堆栈跟踪。更多...
 

公共类型

使用 read_lock_t = std::shared_lock< std::shared_mutex >
 用于同步读取访问的锁类型。
 
使用 write_lock_t = std::unique_lock< std::shared_mutex >
 用于同步写入访问的锁类型。
 

公共成员函数

 tracking_resource_adaptor (device_async_resource_ref upstream, bool capture_stacks=false)
 构造一个新的跟踪资源适配器,使用 upstream 来满足分配请求。更多...
 
 tracking_resource_adaptor (Upstream *upstream, bool capture_stacks=false)
 构造一个新的跟踪资源适配器,使用 upstream 来满足分配请求。更多...
 
 tracking_resource_adaptor (tracking_resource_adaptor const &)=delete
 
 tracking_resource_adaptor (tracking_resource_adaptor &&) noexcept=default
 默认移动构造函数。
 
tracking_resource_adaptoroperator= (tracking_resource_adaptor const &)=delete
 
tracking_resource_adaptoroperator= (tracking_resource_adaptor &&) noexcept=default
 默认移动赋值运算符。更多...
 
rmm::device_async_resource_ref get_upstream_resource () const noexcept
 rmm::device_async_resource_ref 指向上游资源 更多...
 
std::map< void *, allocation_info > const & get_outstanding_allocations () const noexcept
 获取未完成分配的映射。更多...
 
std::size_t get_allocated_bytes () const noexcept
 查询已分配的字节数。请注意,由于可能的内存碎片以及此分配器未跟踪的内部页面大小和对齐方式,此信息不能用于确定可能分配的最大大小。更多...
 
std::string get_outstanding_allocations_str () const
 获取一个字符串,其中包含未完成的分配指针、它们的大小以及(可选)每个指针分配时的堆栈跟踪。更多...
 
void log_outstanding_allocations () const
 通过 RMM_LOG_DEBUG 记录任何未完成的分配。
 
- 从 rmm::mr::device_memory_resource 继承的公共成员函数
 device_memory_resource (device_memory_resource const &)=default
 默认复制构造函数。
 
 device_memory_resource (device_memory_resource &&) noexcept=default
 默认移动构造函数。
 
device_memory_resourceoperator= (device_memory_resource const &)=default
 默认复制赋值运算符。更多...
 
device_memory_resourceoperator= (device_memory_resource &&) noexcept=default
 默认移动赋值运算符。更多...
 
void * allocate (std::size_t bytes, cuda_stream_view stream=cuda_stream_view{})
 分配至少 bytes 大小的内存。更多...
 
void deallocate (void *ptr, std::size_t bytes, cuda_stream_view stream=cuda_stream_view{})
 释放由 p 指向的内存。更多...
 
bool is_equal (device_memory_resource const &other) const noexcept
 将此资源与另一个资源进行比较。更多...
 
void * allocate (std::size_t bytes, std::size_t alignment)
 分配至少 bytes 大小的内存。更多...
 
void deallocate (void *ptr, std::size_t bytes, std::size_t alignment)
 释放由 p 指向的内存。更多...
 
void * allocate_async (std::size_t bytes, std::size_t alignment, cuda_stream_view stream)
 分配至少 bytes 大小的内存。更多...
 
void * allocate_async (std::size_t bytes, cuda_stream_view stream)
 分配至少 bytes 大小的内存。更多...
 
void deallocate_async (void *ptr, std::size_t bytes, std::size_t alignment, cuda_stream_view stream)
 释放由 p 指向的内存。更多...
 
void deallocate_async (void *ptr, std::size_t bytes, cuda_stream_view stream)
 释放由 p 指向的内存。更多...
 
bool operator== (device_memory_resource const &other) const noexcept
 与另一个 device_memory_resource 的比较运算符。更多...
 
bool operator!= (device_memory_resource const &other) const noexcept
 与另一个 device_memory_resource 的比较运算符。更多...
 

详细描述

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

使用 Upstream 分配内存并跟踪分配的资源。

此资源的一个实例可以使用现有上游资源构建以满足分配请求,但任何现有分配将不会被跟踪。跟踪会为每次分配存储大小和指针,如果 capture_stacks 为 true,还会存储堆栈帧,因此它会增加显著的开销。tracking_resource_adaptor 旨在作为调试适配器使用,不应在对性能敏感的代码中使用。请注意,除非项目使用 -rdynamic 链接,否则调用堆栈可能不包含所有符号。这可以通过在 cmake 中使用 add_link_options(-rdynamic) 来实现。

模板参数
Upstream用于分配/释放的上游资源的类型。

构造函数和析构函数文档

◆ tracking_resource_adaptor() [1/2]

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

构造一个新的跟踪资源适配器,使用 upstream 来满足分配请求。

参数
upstream用于分配/释放设备内存的资源
capture_stacks如果为 true,捕获分配调用的堆栈

◆ tracking_resource_adaptor() [2/2]

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

构造一个新的跟踪资源适配器,使用 upstream 来满足分配请求。

异常
rmm::logic_error如果 upstream == nullptr
参数
upstream用于分配/释放设备内存的资源
capture_stacks如果为 true,捕获分配调用的堆栈

成员函数文档

◆ get_allocated_bytes()

template<typename Upstream >
std::size_t rmm::mr::tracking_resource_adaptor< Upstream >::get_allocated_bytes ( ) const
inlinenoexcept

查询已分配的字节数。请注意,由于可能的内存碎片以及此分配器未跟踪的内部页面大小和对齐方式,此信息不能用于确定可能分配的最大大小。

返回值
std::size_t 通过此分配器分配的字节数。

◆ get_outstanding_allocations()

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

获取未完成分配的映射。

返回值
std::map<void*, allocation_info> const& 是分配映射。键是分配的内存指针,数据是 allocation_info 结构体,其中包含大小以及可能的堆栈跟踪。

◆ get_outstanding_allocations_str()

template<typename Upstream >
std::string rmm::mr::tracking_resource_adaptor< Upstream >::get_outstanding_allocations_str ( ) const
inline

获取一个字符串,其中包含未完成的分配指针、它们的大小以及(可选)每个指针分配时的堆栈跟踪。

仅当此资源适配器使用 capture_stack == true 创建时才包含堆栈跟踪。否则,未完成的分配指针将与其大小和空堆栈跟踪一起显示。

返回值
std::string 包含未完成分配指针的 std::string。

◆ get_upstream_resource()

template<typename Upstream >
rmm::device_async_resource_ref rmm::mr::tracking_resource_adaptor< Upstream >::get_upstream_resource ( ) const
inlinenoexcept

rmm::device_async_resource_ref 指向上游资源

返回值
rmm::device_async_resource_ref 指向上游资源

◆ operator=()

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

默认移动赋值运算符。

返回值
tracking_resource_adaptor& 对赋值对象的引用

此类的文档由以下文件生成