我已经编写了一些函子,以这种方式初始化成员指针:
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
是一个托管容器,当超出范围时将释放所有分配的存储。
现在,解除分配只是更新有关哪些存储块可以免费使用的簿记信息,它不会用零来明确覆盖那些块(出于性能原因)。如果这是您希望的行为,则必须手动执行。