是否存在一些 Thrust::device_vector 等效库,可以在 CUDA 内核中使用?

Vik*_*Vik 1 c++ cuda vector device thrust

Throw::device_vector 的自动内存管理确实很有用,唯一的缺点是无法在内核代码中使用它。

我在互联网上查找,刚刚找到了矢量库,例如推力,它处理来自主机代码的设备内存。是否存在内核向量库?如果没有,拥有这样一个图书馆是不是一个坏主意?

Ant*_*ine 5

编写这样的库是可以的,但是效率非常低。

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

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

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