如果我初始化x
使用thrust::device_vector<double> x(10)
,是否可以创建 device_vector
y
跨越 x[2]
通过x[5]
?
注意:我不希望内存被复制,当我使用类似 thrust::device_vector<double> y(x.begin(), x.end())
时会发生这种情况。 .
最佳答案
推力设备向量只有分配或复制构造函数,因此没有直接的方法通过构造另一个设备向量来别名现有向量或设备指针。但正如评论中指出的那样,它实际上也没有必要。推力算法始终适用于迭代器,并且可以使用迭代器算术来实现相同的结果。例如,通过复制构造创建一个新向量:
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);
这两种情况的结果是相同的,第二种相当于为输入向量的子集创建别名。
关于CUDA推力: Is it possible to have two device_vectors point to overlapping memory?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12689801/