push :: device_vector.pushback()会调用memcpy吗?

时间:2018-06-15 06:04:05

标签: cuda gpu thrust push-back

摘要
我想澄清一下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上构建一个矢量。

谢谢。

1 个答案:

答案 0 :(得分:1)

  

device_vector.push_back(7)是否也调用memcpy?

没有。但是,它会导致每次调用内核启动。

  

有没有更有效的方法在GPU上逐个构建矢量?

是。

首先在主机内存中构建它(或它的大段),然后在一次操作中复制或插入设备上的内存。通过这样做,您将大大减少延迟并提高PCI-e总线利用率。