公有成员函数 | 保护类型 | 保护成员函数 | 友元 | 所有成员列表
rmm::mr::pool_memory_resource< Upstream > 类模板参考final

一个合并最佳匹配子分配器,它使用从上游内存资源分配的内存池。 更多...

#include <pool_memory_resource.hpp>

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

公有成员函数

 pool_memory_resource (device_async_resource_ref upstream_mr, std::size_t initial_pool_size, std::optional< std::size_t > maximum_pool_size=std::nullopt)
 构造一个 pool_memory_resource 并使用 upstream_mr 分配初始设备内存池。 更多...
 
 pool_memory_resource (Upstream *upstream_mr, std::size_t initial_pool_size, std::optional< std::size_t > maximum_pool_size=std::nullopt)
 构造一个 pool_memory_resource 并使用 upstream_mr 分配初始设备内存池。 更多...
 
template<typename Upstream2 = Upstream, cuda::std::enable_if_t< cuda::mr::async_resource< Upstream2 >, int > = 0>
 pool_memory_resource (Upstream2 &upstream_mr, std::size_t initial_pool_size, std::optional< std::size_t > maximum_pool_size=std::nullopt)
 构造一个 pool_memory_resource 并使用 upstream_mr 分配初始设备内存池。 更多...
 
 ~pool_memory_resource () override
 销毁 pool_memory_resource 并使用上游资源释放它分配的所有内存。
 
 pool_memory_resource (pool_memory_resource const &)=delete
 
 pool_memory_resource (pool_memory_resource &&)=delete
 
pool_memory_resourceoperator= (pool_memory_resource const &)=delete
 
pool_memory_resourceoperator= (pool_memory_resource &&)=delete
 
device_async_resource_ref get_upstream_resource () const noexcept
 上游资源的 rmm::device_async_resource_ref 引用 更多...
 
std::size_t pool_size () const noexcept
 计算当前内存池的大小。 更多...
 

保护类型

using free_list = detail::coalescing_free_list
 空闲列表实现。
 
using block_type = free_list::block_type
 空闲列表返回的块类型。
 
using lock_guard = std::lock_guard< std::mutex >
 用于同步访问的锁类型。
 

保护成员函数

std::size_t get_maximum_allocation_size () const
 获取此内存资源支持的最大分配大小。 更多...
 
block_type try_to_expand (std::size_t try_size, std::size_t min_size, cuda_stream_view stream)
 尝试通过从上游资源分配至少 min_size 字节的块来扩展内存池。 更多...
 
void initialize_pool (std::size_t initial_size, std::optional< std::size_t > maximum_size)
 为内存池分配初始内存。 更多...
 
block_type expand_pool (std::size_t size, free_list &blocks, cuda_stream_view stream)
 从上游资源分配空间以供应子分配池,并返回足够大小的块。 更多...
 
std::size_t size_to_grow (std::size_t size) const
 给定最小大小,计算扩展内存池的适当大小。 更多...
 
block_type block_from_upstream (std::size_t size, cuda_stream_view stream)
 从上游资源分配一个块以扩展子分配池。 更多...
 
split_block allocate_from_block (block_type const &block, std::size_t size)
 如果需要,拆分 block 以返回指向 size 字节内存的指针。 更多...
 
block_type free_block (void *ptr, std::size_t size) noexcept
 查找、释放并返回与指针 ptr 关联的块。 更多...
 
void release ()
 释放从上游内存资源分配的所有内存。
 
std::pair< std::size_t, std::size_t > free_list_summary (free_list const &blocks)
 获取指定空闲列表中的最大可用块大小和总空闲大小。 更多...
 

友元

class detail::stream_ordered_memory_resource< pool_memory_resource< Upstream >, detail::coalescing_free_list >
 

详细描述

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

一个合并最佳匹配子分配器,它使用从上游内存资源分配的内存池。

分配(do_allocate())和释放(do_deallocate())是线程安全的。此外,此类与 CUDA 每线程默认流兼容。

模板参数
UpstreamResource用于分配内存池的内存资源。实现 rmm::mr::device_memory_resource 接口。

构造函数和析构函数文档

◆ pool_memory_resource() [1/3]

template<typename Upstream >
rmm::mr::pool_memory_resource< Upstream >::pool_memory_resource ( device_async_resource_ref  upstream_mr,
std::size_t  initial_pool_size,
std::optional< std::size_t >  maximum_pool_size = std::nullopt 
)
inlineexplicit

构造一个 pool_memory_resource 并使用 upstream_mr 分配初始设备内存池。

异常
rmm::logic_error如果 initial_pool_size 未对齐到 pool_memory_resource::allocation_alignment 字节的倍数。
rmm::logic_error如果 maximum_pool_size 既不是默认值,也未对齐到 pool_memory_resource::allocation_alignment 字节的倍数。
参数
upstream_mr用于为内存池分配块的内存资源。
initial_pool_size初始内存池的最小大小(字节)。
maximum_pool_size内存池可以增长到的最大大小(字节)。默认为上游资源的所有可用内存。

◆ pool_memory_resource() [2/3]

template<typename Upstream >
rmm::mr::pool_memory_resource< Upstream >::pool_memory_resource ( Upstream *  upstream_mr,
std::size_t  initial_pool_size,
std::optional< std::size_t >  maximum_pool_size = std::nullopt 
)
inlineexplicit

构造一个 pool_memory_resource 并使用 upstream_mr 分配初始设备内存池。

异常
rmm::logic_error如果 upstream_mr == nullptr
rmm::logic_error如果 initial_pool_size 未对齐到 pool_memory_resource::allocation_alignment 字节的倍数。
rmm::logic_error如果 maximum_pool_size 既不是默认值,也未对齐到 pool_memory_resource::allocation_alignment 字节的倍数。
参数
upstream_mr用于为内存池分配块的内存资源。
initial_pool_size初始内存池的最小大小(字节)。
maximum_pool_size内存池可以增长到的最大大小(字节)。默认为上游资源的所有可用内存。

◆ pool_memory_resource() [3/3]

template<typename Upstream >
template<typename Upstream2 = Upstream, cuda::std::enable_if_t< cuda::mr::async_resource< Upstream2 >, int > = 0>
rmm::mr::pool_memory_resource< Upstream >::pool_memory_resource ( Upstream2 &  upstream_mr,
std::size_t  initial_pool_size,
std::optional< std::size_t >  maximum_pool_size = std::nullopt 
)
inlineexplicit

构造一个 pool_memory_resource 并使用 upstream_mr 分配初始设备内存池。

异常
rmm::logic_error如果 upstream_mr == nullptr
rmm::logic_error如果 initial_pool_size 未对齐到 pool_memory_resource::allocation_alignment 字节的倍数。
rmm::logic_error如果 maximum_pool_size 既不是默认值,也未对齐到 pool_memory_resource::allocation_alignment 字节的倍数。
参数
upstream_mr用于为内存池分配块的内存资源。
initial_pool_size初始内存池的最小大小(字节)。
maximum_pool_size内存池可以增长到的最大大小(字节)。默认为上游资源的所有可用内存。

成员函数文档

◆ allocate_from_block()

template<typename Upstream >
split_block rmm::mr::pool_memory_resource< Upstream >::allocate_from_block ( block_type const &  block,
std::size_t  size 
)
inlineprotected

如果需要,拆分 block 以返回指向 size 字节内存的指针。

如果块被拆分,剩余部分将返回到内存池。

参数
block从中进行分配的块。
size请求分配的大小(字节)。
返回值
一个包含已分配指针和输入块中任何未分配剩余部分的对。

◆ block_from_upstream()

template<typename Upstream >
block_type rmm::mr::pool_memory_resource< Upstream >::block_from_upstream ( std::size_t  size,
cuda_stream_view  stream 
)
inlineprotected

从上游资源分配一个块以扩展子分配池。

参数
size从上游资源分配的大小(字节)
stream将使用此内存的流。
异常
如果调用 allocate_async() 抛出异常
返回值
block_type 已分配的块

◆ expand_pool()

template<typename Upstream >
block_type rmm::mr::pool_memory_resource< Upstream >::expand_pool ( std::size_t  size,
free_list blocks,
cuda_stream_view  stream 
)
inlineprotected

从上游资源分配空间以供应子分配池,并返回足够大小的块。

参数
size要分配的最小大小
blocks空闲列表(在此实现中被忽略)
stream将使用此内存的流。
返回值
block_type 至少 size 字节的块

◆ free_block()

template<typename Upstream >
block_type rmm::mr::pool_memory_resource< Upstream >::free_block ( void *  ptr,
std::size_t  size 
)
inlineprotectednoexcept

查找、释放并返回与指针 ptr 关联的块。

参数
ptr要释放内存的指针。
size要释放内存的大小。必须等于原始分配大小。
返回值
(现已释放的) 与 ptr 关联的块。调用者应将此块返回到内存池。

◆ free_list_summary()

template<typename Upstream >
std::pair<std::size_t, std::size_t> rmm::mr::pool_memory_resource< Upstream >::free_list_summary ( free_list const &  blocks)
inlineprotected

获取指定空闲列表中的最大可用块大小和总空闲大小。

这仅用于调试

参数
blocks要返回摘要信息的空闲列表
返回值
std::pair<std::size_t, std::size_t> 最大可用块,总空闲大小的对

◆ get_maximum_allocation_size()

template<typename Upstream >
std::size_t rmm::mr::pool_memory_resource< Upstream >::get_maximum_allocation_size ( ) const
inlineprotected

获取此内存资源支持的最大分配大小。

注意:这不依赖于设备的内存大小。它只是返回 std::size_t 的最大值。

返回值
std::size_t 此内存资源支持的单个分配的最大大小

◆ get_upstream_resource()

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

上游资源的 rmm::device_async_resource_ref 引用

返回值
上游资源的 rmm::device_async_resource_ref 引用

◆ initialize_pool()

template<typename Upstream >
void rmm::mr::pool_memory_resource< Upstream >::initialize_pool ( std::size_t  initial_size,
std::optional< std::size_t >  maximum_size 
)
inlineprotected

为内存池分配初始内存。

参数
initial_size内存池的可选初始大小
maximum_size内存池的可选最大大小
异常
logic_error如果 initial_size 大于 maximum_size(如果已设置)。

◆ pool_size()

template<typename Upstream >
std::size_t rmm::mr::pool_memory_resource< Upstream >::pool_size ( ) const
inlinenoexcept

计算当前内存池的大小。

包括已分配内存和空闲内存。

返回值
std::size_t 当前已分配内存池的总大小。

◆ size_to_grow()

template<typename Upstream >
std::size_t rmm::mr::pool_memory_resource< Upstream >::size_to_grow ( std::size_t  size) const
inlineprotected

给定最小大小,计算扩展内存池的适当大小。

策略是:如果设置了最大内存池大小,则尝试将内存池大小增加配置的最大大小与当前大小之差的一半。如果未设置,则尝试将当前内存池大小加倍。

如果无法满足请求的大小,则返回 0。

参数
size立即所需的最小分配大小
返回值
std::size_t 计算出的内存池增长大小。

◆ try_to_expand()

template<typename Upstream >
block_type rmm::mr::pool_memory_resource< Upstream >::try_to_expand ( std::size_t  try_size,
std::size_t  min_size,
cuda_stream_view  stream 
)
inlineprotected

尝试通过从上游资源分配至少 min_size 字节的块来扩展内存池。

尝试从上游分配 try_size 字节。如果失败,它会迭代地将尝试分配的大小减半,直到达到 min_size,成功后返回分配的块。

异常
rmm::out_of_memory如果无法从上游分配 min_size 字节或超出最大内存池大小。
参数
try_size尝试分配的初始请求大小。
min_size尝试分配的最小请求大小。
stream将使用此内存的流。
返回值
block_type 至少 min_size 字节的块

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