我已经编写了一些函子,以这种方式初始化成员指针:

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

现在,解除分配只是更新有关哪些存储块可以免费使用的簿记信息,它不会用零来明确覆盖那些块(出于性能原因)。如果这是您希望的行为,则必须手动执行。

09-10 05:23
查看更多