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

时间:2016-05-08 18:33:21

标签: 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 应该被删除,但事实并非如此。有人可以向我澄清这件事吗?

1 个答案:

答案 0 :(得分:1)

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

现在取消分配只更新有关哪些内存块可以自由使用的簿记信息,它没有明确地用零说明覆盖这些块(出于性能原因)。如果这是你想要的行为,你必须手动完成。