3

Pretty much as the title says - I plan to .reserve() some memory on the host via an STL vector, and then cudaMemcpy an array from device to host (i.e. into that reserved host memory).

Will the STL vector pick up on the fact I have (by external methods) copied new data into the vector? I.e. will it correctly

  • Identify the new size it should be?
  • Allow me to access the data via [i]-indexing or iterators?
  • Behave as expected in general, i.e. like any normal vector?
4

1 回答 1

2

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

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

不过可行的是调用resize而不是reserve. 在这种情况下,您可以自由地将数据直接复制到向量中,因为它的存储保证是连续的并且大小合适。在这种情况下,您的所有积分都将成立。但请注意,默认构造要写入元素的数据可能会产生开销,但防止这种开销是一个不同的问题,resize向量仍然resize是实现您所追求的唯一可能的方法。

于 2013-05-12T00:17:05.173 回答