如果我使用x
初始化thrust::device_vector<double> x(10)
,是否可以创建一个跨越device_vector
到y
的{{1}} x[2]
?
注意:我不希望复制内存,当我使用x[5]
之类的内容时会发生这种情况。
答案 0 :(得分:4)
推力device_vector只有分配或复制构造函数,因此没有直接的方法通过构造另一个device_vector来对现有的向量或设备指针进行别名。但正如评论中指出的那样,它确实也不需要。 Thrust算法总是在迭代器上工作,并且可以使用迭代器算法来实现相同的结果。例如,通过复制构造创建一个新的向量:
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);
两种情况下的结果相同,第二种情况相当于为输入向量的子集创建别名。