小编cr_*_*ave的帖子

使用unique_ptr和cudaMalloc

我一直在考虑在CUDA中将std :: unique_ptr与设备指针一起使用。我想知道的是,当前的c ++ 11 unique_ptr是否可以与cudaMalloc结合使用。我知道它可以与普通的malloc 一起使用是否可以将C ++智能指针与C的malloc一起使用?),但是cudaMalloc不会在函数的return语句中返回该指针。而是,它返回一个错误代码。指针在引用中返回。

这篇博客文章推荐以下技术:

auto deleter=[&](float* ptr){ cudaFree(ptr); };
std::unique_ptr<float[], decltype(deleter)> d_in(new float[size], deleter);
cudaMalloc((void **) &d_in, size * sizeof(float));
Run Code Online (Sandbox Code Playgroud)

问题:但是,我担心这会创建永不删除(即d_in(new float[size], deleter);)的主机内存吗?除非new float[size]实际上不会生成主机内存或被覆盖?如果上述方法实际上不起作用,可以定义我自己的cudaMalloc包装器吗?-将指针传递给unique_ptr?

就像是:

void* myCudaMalloc(size_t mySize){ 
    void * p; 
    checkCUDAerrorMacro(cudaMalloc((void**) &p, size);) 
    return p;
}

...

auto deleter=[](float* ptr){ cudaFree(ptr); };
std::unique_ptr<float[], decltype(deleter)> d_in(myCudaMalloc(size_t mySize), deleter); 
Run Code Online (Sandbox Code Playgroud)

pointers cuda unique-ptr c++11

4
推荐指数
1
解决办法
1455
查看次数

标签 统计

c++11 ×1

cuda ×1

pointers ×1

unique-ptr ×1