公共类型 | 公共成员函数 | 所有成员列表
rmm::device_scalar< T > 类模板参考

设备内存中单个类型为 T 的对象的容器。 更多...

#include <device_scalar.hpp>

公共类型

使用 value_type = typename device_uvector< T >::value_type
 T,标量元素的类型。
 
使用 size_type = typename device_uvector< T >::size_type
 用于表示大小的类型。
 
使用 reference = typename device_uvector< T >::reference
 value_type&
 
使用 const_reference = typename device_uvector< T >::const_reference
 const value_type&
 
使用 pointer = typename device_uvector< T >::pointer
 data() 返回的指针类型
 
使用 const_pointer = typename device_uvector< T >::const_pointer
 

公共成员函数

 device_scalar (device_scalar &&) noexcept=default
 默认移动构造函数。
 
device_scalaroperator= (device_scalar &&) noexcept=default
 默认移动赋值运算符。 更多...
 
 device_scalar (device_scalar const &)=delete
 复制构造函数被删除,因为它不允许流参数。
 
device_scalaroperator= (device_scalar const &)=delete
 复制赋值运算符被删除,因为它不允许流参数。
 
 device_scalar ()=delete
 默认构造函数被删除,因为它不允许流参数。
 
 device_scalar (cuda_stream_view stream, device_async_resource_ref mr=mr::get_current_device_resource_ref())
 构造一个新的未初始化 device_scalar更多...
 
 device_scalar (value_type const &initial_value, cuda_stream_view stream, device_async_resource_ref mr=mr::get_current_device_resource_ref())
 构造一个带有初始值的新的 device_scalar更多...
 
 device_scalar (device_scalar const &other, cuda_stream_view stream, device_async_resource_ref mr=mr::get_current_device_resource_ref())
 通过深度复制另一个 device_scalar 的内容,使用指定的流和内存资源,构造一个新的 device_scalar更多...
 
value_type value (cuda_stream_view stream) const
 将值从设备复制到主机,同步,并返回值。 更多...
 
void set_value_async (value_type const &value, cuda_stream_view stream)
 device_scalar 的值设置为 v 的值。 更多...
 
void set_value_async (value_type &&, cuda_stream_view)=delete
 
void set_value_to_zero_async (cuda_stream_view stream)
 在指定的流上将 device_scalar 的值设置为零。 更多...
 
pointer data () noexcept
 返回设备内存中对象的指针。 更多...
 
const_pointer data () const noexcept
 返回设备内存中对象的常量指针。 更多...
 
constexpr size_type size () const noexcept
 标量的大小:总是 1。 更多...
 
cuda_stream_view stream () const noexcept
 与设备内存分配关联的流。 更多...
 
void set_stream (cuda_stream_view stream) noexcept
 设置用于释放的流。 更多...
 

详细描述

模板<typename T>
类 rmm::device_scalar< T >

设备内存中单个类型为 T 的对象的容器。

T 必须是可平凡复制的。

模板参数
T对象的类型

成员类型定义文档

◆ const_pointer

模板<typename T >
使用 rmm::device_scalar< T >::const_pointer = typename device_uvector<T>::const_pointer

data() const 返回的迭代器类型

构造函数和析构函数文档

◆ device_scalar() [1/3]

模板<typename T >
rmm::device_scalar< T >::device_scalar ( cuda_stream_view  ,
device_async_resource_ref  mr = mr::get_current_device_resource_ref() 
)
inlineexplicit

构造一个新的未初始化 device_scalar

不同步流。

注意
device_scalar 仅在指定 CUDA 流上的内核和复制操作中安全访问,或者仅当强制执行依赖关系(例如使用 cudaStreamWaitEvent())时才可以在其他流上访问。
异常
rmm::bad_alloc如果分配设备内存失败。
参数
执行异步分配的流。
mr可选,用于分配的资源。

◆ device_scalar() [2/3]

模板<typename T >
rmm::device_scalar< T >::device_scalar ( value_type const &  initial_value,
cuda_stream_view  ,
device_async_resource_ref  mr = mr::get_current_device_resource_ref() 
)
inlineexplicit

构造一个带有初始值的新的 device_scalar

不同步流。

注意
device_scalar 仅在指定 CUDA 流上的内核和复制操作中安全访问,或者仅当强制执行依赖关系(例如使用 cudaStreamWaitEvent())时才可以在其他流上访问。
异常
rmm::bad_alloc如果为 initial_value 分配设备内存失败。
rmm::cuda_error如果将 initial_value 复制到设备内存失败。
参数
initial_value设备内存中对象的初始值。
可选,执行分配和复制的流。
mr可选,用于分配的资源。

◆ device_scalar() [3/3]

模板<typename T >
rmm::device_scalar< T >::device_scalar ( device_scalar< T > const &  other,
cuda_stream_view  ,
device_async_resource_ref  mr = mr::get_current_device_resource_ref() 
)
inline

通过深度复制另一个 device_scalar 的内容,使用指定的流和内存资源,构造一个新的 device_scalar

异常
rmm::bad_alloc如果创建新的分配失败。
rmm::cuda_error如果从 other 复制失败。
参数
other内容将被复制的 device_scalar
用于分配和复制的流
mr用于分配新的 device_scalar 的资源

成员函数文档

◆ data() [1/2]

模板<typename T >
const_pointer rmm::device_scalar< T >::data ( ) const
inlinenoexcept

返回设备内存中对象的常量指针。

注意
如果在与构造函数指定的流不同的 CUDA 流上使用返回的设备指针,则必须在流之间插入适当的依赖关系(例如使用 cudaStreamWaitEvent()cudaStreamSynchronize()),否则可能存在竞态条件。
返回
底层设备内存的常量指针

◆ data() [2/2]

模板<typename T >
pointer rmm::device_scalar< T >::data ( )
inlinenoexcept

返回设备内存中对象的指针。

注意
如果在与构造函数指定的流不同的 CUDA 流上使用返回的设备指针,则必须在流之间插入适当的依赖关系(例如使用 cudaStreamWaitEvent()cudaStreamSynchronize()),否则可能存在竞态条件。
返回
底层设备内存的指针

◆ operator=()

模板<typename T >
device_scalar& rmm::device_scalar< T >::operator= ( device_scalar< T > &&  )
defaultnoexcept

默认移动赋值运算符。

返回
device_scalar& 被赋值对象的引用

◆ set_stream()

模板<typename T >
void rmm::device_scalar< T >::set_stream ( cuda_stream_view  )
inlinenoexcept

设置用于释放的流。

参数
用于释放的流

◆ set_value_async()

模板<typename T >
void rmm::device_scalar< T >::set_value_async ( value_type const &  ,
cuda_stream_view  stream 
)
inline

device_scalar 的值设置为 v 的值。

v 为零时,此针对基本类型的特化经过优化,使用 cudaMemsetAsync

注意
如果此函数指定的流与构造函数指定的流不同,则必须在此函数调用之前和之后在流之间插入适当的依赖关系(例如使用 cudaStreamWaitEvent()cudaStreamSynchronize()),否则可能存在竞态条件。

此函数返回之前不会同步 stream。因此,在 stream 同步之前,不应销毁或修改 v 引用的对象。否则,行为未定义。

注意
: 此函数会产生主机到设备的 memcpy 或设备 memset 操作,应谨慎使用。

示例

int v{42};
// 在 `stream` 上将 42 复制到设备存储。不同步
...
cudaStreamSynchronize(stream);
// 在修改 `v` 之前需要同步
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
异常
rmm::cuda_error如果将 value 复制到设备内存失败。
参数
将复制到设备的主机值
执行复制的 CUDA 流

◆ set_value_to_zero_async()

模板<typename T >
void rmm::device_scalar< T >::set_value_to_zero_async ( cuda_stream_view  )
inline

在指定的流上将 device_scalar 的值设置为零。

注意
如果此函数指定的流与构造函数指定的流不同,则必须在此函数调用之前和之后在流之间插入适当的依赖关系(例如使用 cudaStreamWaitEvent()cudaStreamSynchronize()),否则可能存在竞态条件。

此函数返回之前不会同步 stream

注意
: 此函数会产生设备 memset 操作,应谨慎使用。
参数
执行复制的 CUDA 流

◆ size()

模板<typename T >
constexpr size_type rmm::device_scalar< T >::size ( ) const
inlineconstexprnoexcept

标量的大小:总是 1。

返回
标量的大小:总是 1

◆ stream()

模板<typename T >
cuda_stream_view rmm::device_scalar< T >::stream ( ) const
inlinenoexcept

与设备内存分配关联的流。

返回
与设备内存分配关联的流

◆ value()

模板<typename T >
value_type rmm::device_scalar< T >::value ( cuda_stream_view  ) const
inline

将值从设备复制到主机,同步,并返回值。

将数据从设备复制到主机后同步 stream

注意
如果此函数指定的流与构造函数指定的流不同,则必须在此函数调用之前在流之间插入适当的依赖关系(例如使用 cudaStreamWaitEvent()cudaStreamSynchronize()),否则可能存在竞态条件。
异常
rmm::cuda_error如果复制失败。
rmm::cuda_error如果同步 stream 失败。
返回
T 标量的值。
参数
执行复制和同步的 CUDA 流。

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