设备内存中单个类型为 T
的对象的容器。 更多...
#include <device_scalar.hpp>
模板<typename T>
类 rmm::device_scalar< T >
设备内存中单个类型为 T
的对象的容器。
T
必须是可平凡复制的。
- 模板参数
-
◆ const_pointer
◆ device_scalar() [1/3]
构造一个新的未初始化 device_scalar
。
不同步流。
- 注意
- 该 device_scalar 仅在指定 CUDA 流上的内核和复制操作中安全访问,或者仅当强制执行依赖关系(例如使用
cudaStreamWaitEvent()
)时才可以在其他流上访问。
- 异常
-
- 参数
-
◆ device_scalar() [2/3]
构造一个带有初始值的新的 device_scalar
。
不同步流。
- 注意
- 该 device_scalar 仅在指定 CUDA 流上的内核和复制操作中安全访问,或者仅当强制执行依赖关系(例如使用
cudaStreamWaitEvent()
)时才可以在其他流上访问。
- 异常
-
- 参数
-
initial_value | 设备内存中对象的初始值。 |
流 | 可选,执行分配和复制的流。 |
mr | 可选,用于分配的资源。 |
◆ device_scalar() [3/3]
◆ data() [1/2]
返回设备内存中对象的常量指针。
- 注意
- 如果在与构造函数指定的流不同的 CUDA 流上使用返回的设备指针,则必须在流之间插入适当的依赖关系(例如使用
cudaStreamWaitEvent()
或 cudaStreamSynchronize()
),否则可能存在竞态条件。
- 返回
- 底层设备内存的常量指针
◆ data() [2/2]
返回设备内存中对象的指针。
- 注意
- 如果在与构造函数指定的流不同的 CUDA 流上使用返回的设备指针,则必须在流之间插入适当的依赖关系(例如使用
cudaStreamWaitEvent()
或 cudaStreamSynchronize()
),否则可能存在竞态条件。
- 返回
- 底层设备内存的指针
◆ operator=()
◆ set_stream()
◆ set_value_async()
将 device_scalar
的值设置为 v
的值。
当 v
为零时,此针对基本类型的特化经过优化,使用 cudaMemsetAsync
。
- 注意
- 如果此函数指定的流与构造函数指定的流不同,则必须在此函数调用之前和之后在流之间插入适当的依赖关系(例如使用
cudaStreamWaitEvent()
或 cudaStreamSynchronize()
),否则可能存在竞态条件。
此函数返回之前不会同步 stream
。因此,在 stream
同步之前,不应销毁或修改 v
引用的对象。否则,行为未定义。
- 注意
- : 此函数会产生主机到设备的 memcpy 或设备 memset 操作,应谨慎使用。
示例
int v{42};
...
cudaStreamSynchronize(
stream);
v = 13;
设备内存中单个类型为 T 的对象的容器。
定义: device_scalar.hpp:42
cuda_stream_view stream() const noexcept
与设备内存分配关联的流。
定义: device_scalar.hpp:267
void set_value_async(value_type const &value, cuda_stream_view stream)
将 device_scalar 的值设置为 v 的值。
定义: device_scalar.hpp:204
- 异常
-
- 参数
-
值 | 将复制到设备的主机值 |
流 | 执行复制的 CUDA 流 |
◆ set_value_to_zero_async()
在指定的流上将 device_scalar
的值设置为零。
- 注意
- 如果此函数指定的流与构造函数指定的流不同,则必须在此函数调用之前和之后在流之间插入适当的依赖关系(例如使用
cudaStreamWaitEvent()
或 cudaStreamSynchronize()
),否则可能存在竞态条件。
此函数返回之前不会同步 stream
。
- 注意
- : 此函数会产生设备 memset 操作,应谨慎使用。
- 参数
-
◆ size()
◆ stream()
与设备内存分配关联的流。
- 返回
- 与设备内存分配关联的流
◆ value()
将值从设备复制到主机,同步,并返回值。
将数据从设备复制到主机后同步 stream
。
- 注意
- 如果此函数指定的流与构造函数指定的流不同,则必须在此函数调用之前在流之间插入适当的依赖关系(例如使用
cudaStreamWaitEvent()
或 cudaStreamSynchronize()
),否则可能存在竞态条件。
- 异常
-
- 返回
- T 标量的值。
- 参数
-
此类的文档生成自以下文件: