CUDA Thrust:是否有可能让两个device_vectors指向重叠内存?

时间:2012-10-02 11:59:02

标签: cuda thrust

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

注意:我不希望复制内存,当我使用x[5]之类的内容时会发生这种情况。

1 个答案:

答案 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);

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