从构造函数中本地声明的device_vector使用device_vector::data()方法初始化结构内部的指针是



我已经编码了一些函数,它们以这种方式初始化成员指针:

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是一个托管容器,在超出范围时释放所有分配的存储。

现在,去分配只是更新关于哪些内存块可以自由使用的记账信息,它不会显式地用零覆盖这些块(出于性能原因)。如果这是你想要的行为,你必须手动完成。

最新更新