我可以将设备上的内存直接复制到主机STL向量中使用cudaMemcpy吗?

3
基本上就像标题所说 - 我计划通过STL向主机保留一些内存,然后使用cudaMemcpy将数组从设备复制到主机(即进入已保留的主机内存)。
STL向量会注意到我通过外部方法将新数据复制到向量中吗?也就是说,它会正确地:
- 确定应该有的新大小吗? - 让我通过[i]索引或迭代器访问数据吗? - 总体上表现正常,即像任何普通的向量一样?
1个回答

2

STL vector会意识到我通过外部方法向其中复制了新数据吗?也就是说,它会正确处理吗?

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

但如果使用resize而不是reserve,就可以将数据直接复制到vector中,因为其存储空间保证是连续的且适当大小。在这种情况下,所有的点都成立。但请注意,resize可能会带来默认构造要写入元素的数据的开销,但如何避免这种开销是另一个问题,调整vector的大小仍然是实现你想要的内容的唯一可能的方式。


啊,我希望“reserve”既可以防止开销,又可以让我像平常一样使用向量。 - mchen
@MiloChen 可能是可以实现的,但需要调用未定义的行为并“黑客”向量以调整其大小。 - Christian Rau

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接