CUDA推力:有可能有两个设备_向量指向重叠的内存吗?

CUDA推力:有可能有两个设备_向量指向重叠的内存吗?,cuda,thrust,Cuda,Thrust,如果我使用推力::设备_向量x10初始化x,是否可以创建一个跨越x[2]到x[5]的设备_向量y 注意:我不想复制内存,当我使用诸如推力::设备向量yx.begin,x.end之类的东西时会发生这种情况。推力设备向量只有分配或复制构造函数,因此没有直接的方法通过构造另一个设备向量来别名现有向量或设备指针。但正如评论中所指出的,它也确实不需要。推力算法总是在迭代器上工作,并且可以使用迭代器算法来实现相同的结果。例如,通过复制构造创建新向量: thrust::device_vector<dou

如果我使用推力::设备_向量x10初始化x,是否可以创建一个跨越x[2]到x[5]的设备_向量y


注意:我不想复制内存,当我使用诸如推力::设备向量yx.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);

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

推力设备向量只有分配或复制构造函数,因此无法通过构造另一个设备向量来直接为现有向量或设备指针添加别名。但正如评论中所指出的,它也确实不需要。推力算法总是在迭代器上工作,并且可以使用迭代器算法来实现相同的结果。例如,通过复制构造创建新向量:

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

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

似乎每个向量都有自己的存储区域。但是,您可以到达向量中的原始指针。此外,大多数算法都接受范围,因此您可以使用x.begin+N,而不是声明另一个向量并使用y.begin。为什么还不够?似乎每个向量都有自己的存储区域。但是,您可以到达向量中的原始指针。此外,大多数算法都接受范围,因此您可以使用x.begin+N,而不是声明另一个向量并使用y.begin。为什么还不够?谢谢。这是我的解决方案,尽管为了清晰起见,我使用了设备指针y_begin和y_end。我想没有更好的办法了,谢谢。这是我的解决方案,尽管为了清晰起见,我使用了设备指针y_begin和y_end。我想没有更好的办法了。