摘要
我想澄清一下push :: device_vector是如何工作的。
AFAIK,写入索引位置(例如device_vector [i] = 7)由主机实现,因此会调用memcpy。 device_vector.push_back(7)是否也调用memcpy?
背景
我正在研究一个比较股票价格的项目。价格存储在两个向量中。我迭代了两个向量,当它们的价格相对于彼此发生变化时,我将这个变化写入一个新的向量。所以我永远不知道生成的矢量会有多长。在CPU上,执行此操作的自然方法是使用push_back,但如果每次都调用memcpy,我不想在GPU向量上使用push_back。
有没有更有效的方法在GPU上逐个构建矢量?
研究
我查看了this问题,但它(和其他人)专注于从主机访问元素的最有效方法。我想在GPU上构建一个矢量。
谢谢。
答案 0 :(得分:1)
device_vector.push_back(7)是否也调用memcpy?
没有。但是,它会导致每次调用内核启动。
有没有更有效的方法在GPU上逐个构建矢量?
是。
首先在主机内存中构建它(或它的大段),然后在一次操作中复制或插入设备上的内存。通过这样做,您将大大减少延迟并提高PCI-e总线利用率。