使用 Upstream
分配内存并跟踪分配的资源。更多...
#include <tracking_resource_adaptor.hpp>
类 | |
结构体 | 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_adaptor & | operator= (tracking_resource_adaptor const &)=delete |
tracking_resource_adaptor & | operator= (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 记录任何未完成的分配。 | |
![]() | |
device_memory_resource (device_memory_resource const &)=default | |
默认复制构造函数。 | |
device_memory_resource (device_memory_resource &&) noexcept=default | |
默认移动构造函数。 | |
device_memory_resource & | operator= (device_memory_resource const &)=default |
默认复制赋值运算符。更多... | |
device_memory_resource & | operator= (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 的比较运算符。更多... | |
使用 Upstream
分配内存并跟踪分配的资源。
此资源的一个实例可以使用现有上游资源构建以满足分配请求,但任何现有分配将不会被跟踪。跟踪会为每次分配存储大小和指针,如果 capture_stacks
为 true,还会存储堆栈帧,因此它会增加显著的开销。tracking_resource_adaptor
旨在作为调试适配器使用,不应在对性能敏感的代码中使用。请注意,除非项目使用 -rdynamic
链接,否则调用堆栈可能不包含所有符号。这可以通过在 cmake 中使用 add_link_options(-rdynamic)
来实现。
Upstream | 用于分配/释放的上游资源的类型。 |
|
inline |
构造一个新的跟踪资源适配器,使用 upstream
来满足分配请求。
upstream | 用于分配/释放设备内存的资源 |
capture_stacks | 如果为 true,捕获分配调用的堆栈 |
|
inline |
构造一个新的跟踪资源适配器,使用 upstream
来满足分配请求。
rmm::logic_error | 如果 upstream == nullptr |
upstream | 用于分配/释放设备内存的资源 |
capture_stacks | 如果为 true,捕获分配调用的堆栈 |
|
inlinenoexcept |
查询已分配的字节数。请注意,由于可能的内存碎片以及此分配器未跟踪的内部页面大小和对齐方式,此信息不能用于确定可能分配的最大大小。
|
inlinenoexcept |
获取未完成分配的映射。
|
inline |
获取一个字符串,其中包含未完成的分配指针、它们的大小以及(可选)每个指针分配时的堆栈跟踪。
仅当此资源适配器使用 capture_stack == true
创建时才包含堆栈跟踪。否则,未完成的分配指针将与其大小和空堆栈跟踪一起显示。
|
inlinenoexcept |
rmm::device_async_resource_ref 指向上游资源
|
defaultnoexcept |
默认移动赋值运算符。