CUDA 推力:是否可以有两个device_vectors指向重叠的内存



如果我使用 thrust::device_vector<double> x(10) 初始化x,是否可以创建一个跨越 x[2]x[5]device_vector y

注意:我不希望复制内存,当我使用类似 thrust::device_vector<double> y(x.begin(), x.end()) 的东西时会发生这种情况。

力device_vector只有分配或复制构造函数,因此没有直接的方法可以通过构造另一个device_vector来别名现有矢量或设备指针。但正如评论中指出的那样,它也确实不需要。推力算法始终在迭代器上工作,并且可以使用迭代器算法来实现相同的结果。例如,通过复制构造创建一个新向量:

thrust::device_vector<double> x(10);
thrust::device_vector<double> y(x.begin()+2, x.begin()+5);
double val = thrust::reduce(y.begin(), y.end());

而如果没有它,这将返回相同的答案:

thrust::device_vector<double> x(10);
double val = thrust::reduce(x.begin()+2, x.begin()+5);

这两种情况的结果是相同的,第二种等效于为输入向量的子集创建别名。

最新更新