push::device_vector的自动内存管理确实非常有用,唯一的缺点是无法在内核代码中使用它。
我在Internet上浏览时,发现了 vector 库(例如推力),用于处理主机代码中的设备内存。是否存在用于内核的 vector 库?如果不是,拥有这样的图书馆是一个坏主意吗?
最佳答案
可以编写这样的库,但是效率很低。
实际上,推力:: device_vector仅与推力:: host_vector或std::vector不同,因为它在设备而非主机上分配了内存。调整大小算法是相同的,并且在主机上运行。
调整大小逻辑非常简单,但是涉及分配/释放内存和复制数据。在多线程设置中,每次线程调整大小时,都必须锁定整个 vector -由于复制,这可能会很长。
在内核将元素附加到 vector 的情况下,同步机制实际上将序列化工作,因为一次只允许调整一个线程的大小。因此,您的代码将以单个设备处理器的速度运行,减去(相当大的)同步开销。这可能比CPU实现要慢很多。
关于c++ - 是否存在一些在CUDA内核中使用的推力:: device_vector等效库?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8053614/