我可以从设备cudaMemcpy直接进入主机STL向量吗?

时间:2013-05-12 00:10:27

标签: memory vector cuda copy gpgpu

就像标题所说的那样 - 我计划通过STL向量.reserve()主机上的一些内存,然后cudaMemcpy从设备到主机(即进入该保留主机内存)的数组[i]

STL向量是否会接受我(通过外部方法)将新数据复制到向量中的事实?即会不会正确

  • 确定应该是新的尺寸?
  • 允许我通过{{1}} - 索引或迭代器访问数据吗?
  • 一般表现如预期的那样,即像任何正常的载体一样?

1 个答案:

答案 0 :(得分:2)

  

STL向量是否会接受我所拥有的事实(通过外部方法)   将新数据复制到向量中?即会不会。

不,它不会,因为你只是reserved,而没有实际调整矢量大小。 reserve只是一个保留内部存储的请求,以减少内存分配开销并防止迭代器失效。从外面看,它不会改变容器的大小。

虽然可以拨打resize而不是reserve。在这种情况下,您可以直接将数据直接复制到矢量中,因为它的存储保证是连续的并且大小合适。在这种情况下,你的所有积分都将成立。但请注意resize带有可能的开销,默认构建要写入元素的数据,但是防止这种开销是另一个问题,resize向量仍然是实现你所追求的唯一可行方式。