Memory 我可以直接从设备到主机STL向量中CudAMCPY吗?

Memory 我可以直接从设备到主机STL向量中CudAMCPY吗?,memory,vector,cuda,copy,gpgpu,Memory,Vector,Cuda,Copy,Gpgpu,正如标题所说的-我计划通过STL向量.reserve()主机上的一些内存,然后cudaMemcpy从设备到主机的数组(即进入保留的主机内存) STL向量是否会发现我(通过外部方法)已将新数据复制到向量中?也就是说,它是否正确 确定它应该是什么新尺寸 允许我通过索引或迭代器访问数据吗 通常表现为预期的行为,即与任何法向量一样 STL向量是否会根据我所拥有的事实(通过外部方法)进行识别 将新数据复制到向量中?也就是说,它是否正确 不,它不会,因为您只保留了,而没有实际调整向量的大小reserve

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

STL向量是否会发现我(通过外部方法)已将新数据复制到向量中?也就是说,它是否正确

  • 确定它应该是什么新尺寸
  • 允许我通过索引或迭代器访问数据吗
  • 通常表现为预期的行为,即与任何法向量一样
STL向量是否会根据我所拥有的事实(通过外部方法)进行识别 将新数据复制到向量中?也就是说,它是否正确

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


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

Ahh,我希望
reserve
-ing既能防止开销,又能让我像往常一样使用向量。@MiloChen可能是可以实现的,但必须调用未定义的行为和“黑客”向量来调整其大小。