如果我使用 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);
这两种情况的结果是相同的,第二种等效于为输入向量的子集创建别名。