用于设备内存分配的 RAII(资源获取即初始化)构造。更多...
#include <device_buffer.hpp>
用于设备内存分配的 RAII(资源获取即初始化)构造。
此类使用 device_async_resource_ref
分配无类型且 未初始化 的设备内存。如果未明确指定,则使用 get_current_device_resource_ref()
返回的内存资源。
- 注意
- 与
std::vector
或 thrust::device_vector
不同,device_buffer
分配的设备内存是未初始化的。因此,在首次初始化之前读取 data()
的内容是未定义行为。
示例
custom_memory_resource mr;
cuda_stream_view
stream = cuda_stream_view{};
buff_default.resize(100,
stream);
cuda_stream_view stream() const noexcept
最近为分配/释放指定的流。
定义: device_buffer.hpp:392
device_buffer()
默认构造函数创建一个空的 device_buffer
定义: device_buffer.hpp:95
◆ device_buffer() [1/4]
构造一个大小为 size
字节、未初始化的新设备缓冲区。
- 异常
-
- 参数
-
size | 在设备内存中分配的大小(字节)。 |
stream | 如果内存资源支持流,则内存可以在其上分配的 CUDA 流。 |
mr | 用于设备内存分配的内存资源。 |
◆ device_buffer() [2/4]
通过从现有主机或设备内存分配的原始指针复制来构造新的设备缓冲区。
- 注意
- 此函数不同步
stream
。source_data
在 stream
上复制,因此调用者负责正确的同步,以确保复制发生时 source_data
有效。这包括在此函数调用后按流顺序销毁 source_data
,或者在此函数返回后根据需要同步或等待 stream
。
- 异常
-
- 参数
-
source_data | 指向要复制的主机或设备内存的指针。 |
size | 要复制的大小(字节)。 |
stream | 如果内存资源支持流,则内存可以在其上分配的 CUDA 流。 |
mr | 用于设备内存分配的内存资源 |
◆ device_buffer() [3/4]
通过深拷贝另一个 device_buffer
的内容来构造一个新的 device_buffer
,可选择使用指定的流和内存资源。
- 注意
- 仅从
other
复制 other.size()
字节,即如果 other.size() != other.capacity()
,则新构造的 device_buffer
的大小和容量将等于 other.size()
。
- 此函数不同步
stream
。other
在 stream
上复制,因此调用者负责正确的同步,以确保复制发生时 other
有效。这包括在此函数调用后按流顺序销毁 other
,或者在此函数返回后根据需要同步或等待 stream
。
- 异常
-
- 参数
-
◆ device_buffer() [4/4]
◆ ~device_buffer()
rmm::device_buffer::~device_buffer |
( |
| ) |
|
|
inlinenoexcept |
销毁设备缓冲区对象。
- 注意
- 如果内存资源支持流,则此析构函数使用最近传递给此设备缓冲区任何方法的流进行释放。
◆ capacity()
std::size_t rmm::device_buffer::capacity |
( |
| ) |
const |
|
inlinenoexcept |
◆ data() [1/2]
void const* rmm::device_buffer::data |
( |
| ) |
const |
|
inlinenoexcept |
指向设备内存分配的常量指针。
- 返回值
- 指向设备内存分配的常量指针
◆ data() [2/2]
void* rmm::device_buffer::data |
( |
| ) |
|
|
inlinenoexcept |
指向设备内存分配的指针。
- 返回值
- 指向设备内存分配的指针
◆ is_empty()
bool rmm::device_buffer::is_empty |
( |
| ) |
const |
|
inlinenoexcept |
◆ memory_resource()
用于分配和释放的资源。
- 返回值
- 用于分配和释放的资源
◆ operator=()
◆ reserve()
void rmm::device_buffer::reserve |
( |
std::size_t |
new_capacity, |
|
|
cuda_stream_view |
stream |
|
) |
| |
|
inline |
增加设备内存分配的容量。
如果请求的 new_capacity
小于或等于 capacity()
,则不执行任何操作。
如果 new_capacity
大于 capacity()
,则在 stream
上进行新的分配以满足 new_capacity
,并将旧分配的内容在 stream
上复制到新的分配。然后释放旧的分配。从 [size(), new_capacity)
的字节是未初始化的。
- 异常
-
- 参数
-
new_capacity | 请求的新容量(字节) |
stream | 用于分配和复制的流 |
◆ resize()
void rmm::device_buffer::resize |
( |
std::size_t |
new_size, |
|
|
cuda_stream_view |
stream |
|
) |
| |
|
inline |
◆ set_stream()
◆ shrink_to_fit()
◆ size()
std::size_t rmm::device_buffer::size |
( |
| ) |
const |
|
inlinenoexcept |
◆ ssize()
std::int64_t rmm::device_buffer::ssize |
( |
| ) |
const |
|
inlinenoexcept |
◆ stream()
最近为分配/释放指定的流。
- 返回值
- 最近为分配/释放指定的流
此类的文档由以下文件生成