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/