c++ - 使用构造函数中本地声明的 device_vector 中的 device_vector::data() 方法初始化结构内部的指针是否安全?

标签 c++ cuda thrust

我编写了一些以这种方式初始化成员指针的仿函数:

struct A
{
    A() {
        thust::device_vector<int> d_vect(3);
        d_vect[0]=1;
        d_vect[1]=2;
        d_vect[2]=3;

        pointer = thrust::raw_pointer_cast(d_vect.data());
    }

    __host__ __device__ void operator() {
        //code using pointer
    };

    int* pointer;

};

以这种方式编写的仿函数运行时没有任何明显的问题,所以我很想知道存储在 d_vect 中的数据发生了什么。阅读文档我有这样的印象当 d_vect 超出范围时应该销毁这些数据,所以我希望数据点由 pointer 应该被删除,但事实并非如此。请有人可以向我澄清这件事吗?

最佳答案

您的理解是正确的:thrust::device_vector 是一个托管容器,当它超出范围时会释放所有分配的存储空间。

现在取消分配仅更新有关哪些内存块可以免费使用的簿记信息,它不会显式地用零覆盖这些 block (出于性能原因)。如果这是您希望的行为,您必须手动执行此操作。

关于c++ - 使用构造函数中本地声明的 device_vector 中的 device_vector::data() 方法初始化结构内部的指针是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37103401/

相关文章:

c++ - 偏特化语法困惑

c++ - 对小整数值使用 char 而不是使用 INT

c++ - 部署后,简单的C++ ofstream项目无法正常工作

memory-management - CUDA 分配数组

c++ - CUDA 推力 remove_if 与 operlapping 模板序列

c++ - 如何使用 CUDA/Thrust 根据其中一个数组中的值对两个数组/vector 进行排序

c++ - 我今天应该使用 TCHAR 吗?

c++ - OpenCV GPU 垫悬挂

function - CUDA C++ 中的一个函数调用另一个函数

c++ - CUB 选择是否有返回的索引