有CUDA智能指针吗?

mch*_*hen 4 memory cuda gpgpu smart-pointers

如果没有,cudaMalloc抛出异常时释放内存的标准方法是什么?(请注意,我无法使用Thrust.)

Ser*_* K. 5

您可以使用RAII惯用法,cudaMalloc()并分别cudaFree()调用对象的构造函数和析构函数.

一旦抛出异常,您的析构函数将被调用,这将释放分配的内存.

如果将此对象包装到智能指针中(或使其行为类似于指针),您将获得CUDA智能指针.


Mah*_*hdi 5

您可以使用此自定义cuda::shared_ptr实现。如上所述,此实现用作std::shared_ptrCUDA 设备内存的包装器。

使用示例:

std::shared_ptr<T[]> data_host =  std::shared_ptr<T[]>(new T[n]);
.
.
.

// In host code:
fun::cuda::shared_ptr<T> data_dev;
data_dev->upload(data_host.get(), n);
// In .cu file:
// data_dev.data() points to device memory which contains data_host;
 
Run Code Online (Sandbox Code Playgroud)

该存储库确实是一个头文件 ( cudasharedptr.h),因此如果您的应用程序需要的话,可以很容易地操作它。