模块 | 文件 | | 类型别名 | 函数 | 变量
内存资源
内存资源的协作图

模块

 设备内存资源
 
 主机内存资源
 
 设备资源适配器
 

文件

文件  is_resource_adaptor.hpp
 
文件  pinned_host_memory_resource.hpp
 
文件  resource_ref.hpp
 

类  rmm::mr::pinned_host_memory_resource
 用于分配 pinned 主机内存的内存资源类。 更多...
 

类型别名

使用 rmm::device_resource_ref = cuda::mr::resource_ref< cuda::mr::device_accessible >
 具有属性 cuda::mr::device_accessiblecuda::mr::resource_ref 的别名。
 
使用 rmm::device_async_resource_ref = cuda::mr::async_resource_ref< cuda::mr::device_accessible >
 具有属性 cuda::mr::device_accessiblecuda::mr::async_resource_ref 的别名。
 
使用 rmm::host_resource_ref = cuda::mr::resource_ref< cuda::mr::host_accessible >
 具有属性 cuda::mr::host_accessiblecuda::mr::resource_ref 的别名。
 
使用 rmm::host_async_resource_ref = cuda::mr::async_resource_ref< cuda::mr::host_accessible >
 具有属性 cuda::mr::host_accessiblecuda::mr::async_resource_ref 的别名。
 
使用 rmm::host_device_resource_ref = cuda::mr::resource_ref< cuda::mr::host_accessible, cuda::mr::device_accessible >
 具有属性 cuda::mr::host_accessiblecuda::mr::device_accessiblecuda::mr::resource_ref 的别名。
 
使用 rmm::host_device_async_resource_ref = cuda::mr::async_resource_ref< cuda::mr::host_accessible, cuda::mr::device_accessible >
 具有属性 cuda::mr::host_accessiblecuda::mr::device_accessiblecuda::mr::async_resource_ref 的别名。
 

函数

device_memory_resourcermm::mr::get_per_device_resource (cuda_device_id device_id)
 获取指定设备的资源。 更多...
 
device_memory_resourcermm::mr::set_per_device_resource (cuda_device_id device_id, device_memory_resource *new_mr)
 为指定的设备设置 device_memory_resource更多...
 
device_memory_resourcermm::mr::get_current_device_resource ()
 获取当前设备的内存资源。 更多...
 
device_memory_resourcermm::mr::set_current_device_resource (device_memory_resource *new_mr)
 设置当前设备的内存资源。 更多...
 
device_async_resource_ref rmm::mr::get_per_device_resource_ref (cuda_device_id device_id)
 获取指定设备的 device_async_resource_ref更多...
 
device_async_resource_ref rmm::mr::set_per_device_resource_ref (cuda_device_id device_id, device_async_resource_ref new_resource_ref)
 将指定设备的 device_async_resource_ref 设置为 new_resource_ref 更多...
 
device_async_resource_ref rmm::mr::get_current_device_resource_ref ()
 获取当前设备的 device_async_resource_ref更多...
 
device_async_resource_ref rmm::mr::set_current_device_resource_ref (device_async_resource_ref new_resource_ref)
 设置当前设备的 device_async_resource_ref更多...
 
device_async_resource_ref rmm::mr::reset_per_device_resource_ref (cuda_device_id device_id)
 将指定设备的 device_async_resource_ref 重置为初始资源。 更多...
 
device_async_resource_ref rmm::mr::reset_current_device_resource_ref ()
 将当前设备的 device_async_resource_ref 重置为初始资源。 更多...
 
template<class Resource >
device_async_resource_ref rmm::to_device_async_resource_ref_checked (Resource *res)
 将内存资源的指针转换为 device_async_resource_ref,并检查是否为 nullptr更多...
 

变量

template<class Resource , class = void>
constexpr bool rmm::mr::is_resource_adaptor = false
 通过检查是否存在 get_upstream_resource 来判断资源是否是资源适配器的概念。
 

详细描述

函数文档

◆ get_current_device_resource()

device_memory_resource* rmm::mr::get_current_device_resource ( )
inline

获取当前设备的内存资源。

返回为当前设备设置的资源指针。初始资源是一个 cuda_memory_resource

“当前设备”是由 cudaGetDevice 返回的设备。

此函数对于对 set_per_device_resourceget_per_device_resourceget_current_device_resourceset_current_device_resource 的并发调用是线程安全的。对这些函数中的任何一个进行并发调用将产生有效状态,但执行顺序是未定义的。

注意
返回的 device_memory_resource 只能与当前的 CUDA 设备一起使用。更改当前设备(例如,使用 cudaSetDevice())然后使用返回的资源可能会导致未定义的行为。如果在活动的 CUDA 设备与创建 device_memory_resource 时活动的设备不同时使用 device_memory_resource,则其行为是未定义的。
返回值
指向当前设备资源的指针

◆ get_current_device_resource_ref()

device_async_resource_ref rmm::mr::get_current_device_resource_ref ( )
inline

获取当前设备的 device_async_resource_ref

返回为当前设备设置的 device_async_resource_ref。初始 resource_ref 引用一个 cuda_memory_resource

“当前设备”是由 cudaGetDevice 返回的设备。

此函数对于对 set_per_device_resource_refget_per_device_resource_refget_current_device_resource_refset_current_device_resource_ref 和 `reset_current_device_resource_ref 的并发调用是线程安全的。对这些函数中的任何一个进行并发调用将产生有效状态,但执行顺序是未定义的。

注意
返回的 device_async_resource_ref 只能与当前的 CUDA 设备一起使用。更改当前设备(例如,使用 cudaSetDevice())然后使用返回的 resource_ref 可能会导致未定义的行为。如果在活动的 CUDA 设备与创建内存资源时活动的设备不同时使用 device_async_resource_ref,则其行为是未定义的。
返回值
当前设备激活的 device_async_resource_ref

◆ get_per_device_resource()

device_memory_resource* rmm::mr::get_per_device_resource ( cuda_device_id  device_id)
inline

获取指定设备的资源。

返回指定设备的 device_memory_resource 指针。初始资源是一个 cuda_memory_resource

device_id.value() 必须在范围 [0, cudaGetDeviceCount()) 内,否则行为未定义。

此函数对于对 set_per_device_resourceget_per_device_resourceget_current_device_resourceset_current_device_resource 的并发调用是线程安全的。对这些函数中的任何一个进行并发调用将产生有效状态,但执行顺序是未定义的。

注意
返回的 device_memory_resource 只能在 CUDA 设备 device_id 是当前设备时使用(例如,使用 cudaSetDevice() 设置)。如果在活动的 CUDA 设备与创建 device_memory_resource 时活动的设备不同时使用 device_memory_resource,则其行为是未定义的。
参数
device_id目标设备的ID
返回值
指向设备 device_id 当前 device_memory_resource 的指针

◆ get_per_device_resource_ref()

device_async_resource_ref rmm::mr::get_per_device_resource_ref ( cuda_device_id  device_id)
inline

获取指定设备的 device_async_resource_ref

返回指定设备的 device_async_resource_ref。初始 resource_ref 引用一个 cuda_memory_resource

device_id.value() 必须在范围 [0, cudaGetDeviceCount()) 内,否则行为未定义。

此函数对于对 set_per_device_resource_refget_per_device_resource_refget_current_device_resource_refset_current_device_resource_refreset_current_device_resource_ref 的并发调用是线程安全的。对这些函数中的任何一个进行并发调用将产生有效状态,但执行顺序是未定义的。

注意
返回的 device_async_resource_ref 只能在 CUDA 设备 device_id 是当前设备时使用(例如,使用 cudaSetDevice() 设置)。如果在活动的 CUDA 设备与创建内存资源时活动的设备不同时使用 device_async_resource_ref,则其行为是未定义的。
参数
device_id目标设备的ID
返回值
设备 device_id 当前的 device_async_resource_ref

◆ reset_current_device_resource_ref()

device_async_resource_ref rmm::mr::reset_current_device_resource_ref ( )
inline

将当前设备的 device_async_resource_ref 重置为初始资源。

重置为引用初始 cuda_memory_resource。 “当前设备”是由 cudaGetDevice 返回的设备。

此函数对于对 set_per_device_resource_refget_per_device_resource_refget_current_device_resource_refset_current_device_resource_ref 和 `reset_current_device_resource_ref 的并发调用是线程安全的。对这些函数中的任何一个进行并发调用将产生有效状态,但执行顺序是未定义的。

返回值
设备 device_id 之前的 device_async_resource_ref

◆ reset_per_device_resource_ref()

device_async_resource_ref rmm::mr::reset_per_device_resource_ref ( cuda_device_id  device_id)
inline

将指定设备的 device_async_resource_ref 重置为初始资源。

重置为引用初始 cuda_memory_resource

device_id.value() 必须在范围 [0, cudaGetDeviceCount()) 内,否则行为未定义。

此函数对于对 set_per_device_resource_refget_per_device_resource_refget_current_device_resource_refset_current_device_resource_ref 和 `reset_current_device_resource_ref 的并发调用是线程安全的。对这些函数中的任何一个进行并发调用将产生有效状态,但执行顺序是未定义的。

参数
device_id目标设备的ID
返回值
设备 device_id 之前的 device_async_resource_ref

◆ set_current_device_resource()

device_memory_resource* rmm::mr::set_current_device_resource ( device_memory_resource new_mr)
inline

设置当前设备的内存资源。

如果 new_mr 不是 nullptr,则将当前设备的资源指针设置为 new_mr。否则,将资源重置为初始 cuda_memory_resource

“当前设备”是由 cudaGetDevice 返回的设备。

new_mr 指向的对象必须在其最后一次使用资源之后仍然存在,否则行为未定义。调用者有责任维护资源对象的生命周期。

此函数对于对 set_per_device_resourceget_per_device_resourceget_current_device_resourceset_current_device_resource 的并发调用是线程安全的。对这些函数中的任何一个进行并发调用将产生有效状态,但执行顺序是未定义的。

注意
new_mr 中传入的资源必须是在当前 CUDA 设备上创建的。如果在活动的 CUDA 设备与创建 device_memory_resource 时活动的设备不同时使用 device_memory_resource,则其行为是未定义的。
参数
new_mr如果不是 nullptr,指向用于当前设备的新资源的指针
返回值
指向当前设备之前资源的指针

◆ set_current_device_resource_ref()

device_async_resource_ref rmm::mr::set_current_device_resource_ref ( device_async_resource_ref  new_resource_ref)
inline

设置当前设备的 device_async_resource_ref

“当前设备”是由 cudaGetDevice 返回的设备。

new_resource_ref 引用的对象必须在其最后一次使用资源之后仍然存在,否则行为未定义。调用者有责任维护资源对象的生命周期。

此函数对于对 set_per_device_resource_refget_per_device_resource_refget_current_device_resource_refset_current_device_resource_ref 和 `reset_current_device_resource_ref 的并发调用是线程安全的。对这些函数中的任何一个进行并发调用将产生有效状态,但执行顺序是未定义的。

注意
new_resource 中传入的资源必须是在当前 CUDA 设备上创建的。如果在活动的 CUDA 设备与创建内存资源时活动的设备不同时使用 device_async_resource_ref,则其行为是未定义的。
参数
new_resource_ref用于当前设备的新 device_async_resource_ref
返回值
当前设备之前的 device_async_resource_ref

◆ set_per_device_resource()

device_memory_resource* rmm::mr::set_per_device_resource ( cuda_device_id  device_id,
device_memory_resource new_mr 
)
inline

设置指定设备的 device_memory_resource

如果 new_mr 不是 nullptr,则将 id 指定设备的内存资源指针设置为 new_mr。否则,将 id 的资源重置为初始 cuda_memory_resource

id.value() 必须在范围 [0, cudaGetDeviceCount()) 内,否则行为未定义。

new_mr 指向的对象必须在其最后一次使用资源之后仍然存在,否则行为未定义。调用者有责任维护资源对象的生命周期。

此函数对于对 set_per_device_resourceget_per_device_resourceget_current_device_resourceset_current_device_resource 的并发调用是线程安全的。对这些函数中的任何一个进行并发调用将产生有效状态,但执行顺序是未定义的。

注意
new_mr 中传入的资源必须是在设备 id 是当前 CUDA 设备时创建的(例如,使用 cudaSetDevice() 设置)。如果在活动的 CUDA 设备与创建 device_memory_resource 时活动的设备不同时使用 device_memory_resource,则其行为是未定义的。
参数
device_id目标设备的ID
new_mr如果不是 nullptr,指向新的 device_memory_resource 的指针,用作 id 的新资源
返回值
指向 id 之前内存资源的指针

◆ set_per_device_resource_ref()

device_async_resource_ref rmm::mr::set_per_device_resource_ref ( cuda_device_id  device_id,
device_async_resource_ref  new_resource_ref 
)
inline

将指定设备的 device_async_resource_ref 设置为 new_resource_ref

device_id.value() 必须在范围 [0, cudaGetDeviceCount()) 内,否则行为未定义。

new_resource_ref 引用的对象必须在其最后一次使用资源之后仍然存在,否则行为未定义。调用者有责任维护资源对象的生命周期。

此函数对于对 set_per_device_resource_refget_per_device_resource_refget_current_device_resource_refset_current_device_resource_ref 和 `reset_current_device_resource_ref 的并发调用是线程安全的。对这些函数中的任何一个进行并发调用将产生有效状态,但执行顺序是未定义的。

注意
new_resource_ref 中传入的资源必须是在设备 device_id 是当前 CUDA 设备时创建的(例如,使用 cudaSetDevice() 设置)。如果在活动的 CUDA 设备与创建内存资源时活动的设备不同时使用 device_async_resource_ref,则其行为是未定义的。
参数
device_id目标设备的ID
new_resource_ref新的 device_async_resource_ref,用作设备 device_id 的新资源
返回值
设备 device_id 之前的 device_async_resource_ref

◆ to_device_async_resource_ref_checked()

template<class Resource >
device_async_resource_ref rmm::to_device_async_resource_ref_checked ( Resource *  res)

将内存资源的指针转换为 device_async_resource_ref,并检查是否为 nullptr

模板参数
Resource内存资源的类型。
参数
res指向内存资源的指针。
返回值
指向内存资源的 device_async_resource_ref
异常
std::logic_error如果内存资源指针为空。