编写这样的库是可以的,但是效率非常低。
事实上,thrust::device_vector 与 Thrust::host_vector 或 std::vector 的唯一区别在于它在设备而不是主机上分配内存。调整大小算法是相同的,并且在主机上运行。
调整大小逻辑非常简单,但涉及分配/释放内存和复制数据。在多线程设置中,每次线程调整向量大小时都必须锁定整个向量 - 由于副本的原因,这可能会很长。
在内核将元素附加到向量的情况下,同步机制实际上会序列化工作,因为一次只允许一个线程调整大小。因此,您的代码将以单个设备处理器的速度运行,减去(相当大的)同步开销。这可能会比 CPU 实现慢很多。