我已经编码了一些函数,它们以这种方式初始化成员指针:
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
是一个托管容器,在超出范围时释放所有分配的存储。
现在,去分配只是更新关于哪些内存块可以自由使用的记账信息,它不会显式地用零覆盖这些块(出于性能原因)。如果这是你想要的行为,你必须手动完成。