c++ - 是否存在一些 thrust::device_vector 等效库,以在 CUDA 内核中使用?

标签 c++ vector cuda device thrust

thrust::device_vector 的自动内存管理非常有用,唯一的缺点是无法在内核代码中使用它。

我在 Internet 上查看过,刚刚发现 vector 库,例如 thrust,它处理来自主机代码的设备内存。是否存在任何内核 vector 库?如果没有,拥有这样一个图书馆是不是一个坏主意?

最佳答案

可以编写这样的库,但效率很低。

确实,thrust::device_vector 与 thrust::host_vector 或 std::vector 的唯一区别在于它在设备而不是主机上分配内存。大小调整算法相同,并在主机上运行。

调整大小的逻辑非常简单,但涉及分配/释放内存和复制数据。在多线程设置中,每次线程调整其大小时都必须锁定整个 vector - 由于复制,这可能会很长。

在将元素附加到 vector 的内核的情况下,同步机制实际上会序列化工作,因为一次只允许一个线程调整大小。因此,您的代码将以单个设备处理器的速度运行,减去(相当大的)同步开销。这可能比 CPU 实现慢很多。

关于c++ - 是否存在一些 thrust::device_vector 等效库,以在 CUDA 内核中使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8053614/

相关文章:

没有参数的 C++ 可变参数函数

c++ - 为 gmock 自动生成模拟类

c++ - 为什么将对象插入 vector 会导致 C2679

c++ - 在 C++ 中堆叠/连接 2D vector

linux - 在 Windows 中运行时的 CUDA 性能损失

python - 使用 C++ 解析 ONNX 模型。使用 C++ 从 onnx 模型中提取层、输入和输出形状

Unix 上的 C++ : Differences in threading libraries?

c++ - 鉴于下面的代码片段,我如何确认 v[0] 解析 VS2010 中的 <vector> 头文件的类型?

python - Numba CUDA 在运行时共享内存大小?

c++ - 在我调用 cuCtxDestroy 之后重用 cuMemAlloc 内存是否安全?