2

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

注意:我不想复制内存,当我使用类似thrust::device_vector<double> y(x.begin(), x.end()).

4

1 回答 1

4

推力 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);

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

于 2012-10-02T17:23:33.547 回答