CUDA推力: Is it possible to have two device_vectors point to overlapping memory?

标签 cuda thrust

如果我初始化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/

相关文章:

optimization - 为什么我得到 "nvcc fatal : redefinition of argument ' 优化'”?

c++ - 与 CUDA 库链接时无法在 Qt Creator 下调试 cpp 代码

performance - 如何以最大性能标准化 CUDA 中的矩阵列?

c++ - 在每个主机线程(多线程 CPU)上创建一个 cuda 流

cuda - 将参数按值传递给内核函数时,参数复制到哪里?

android - 为 Tegra GPU 编程需要什么

concurrency - 推力执行策略将内核发布到默认流

cuda - 为什么编译器会给出错误?

c++ - 基于 cuda 推力的方法对 TCP 流中的数据包进行分组

arrays - CUDA 线程将可变数量的数据附加到公共(public)数组