当数组需要复制回主机时如何避免同步?

时间:2013-12-05 08:27:20

标签: c# c++ cuda

我正在做的是将数组从C#传递给C ++ dll。然后我在CUDA中做一些计算,我需要将数据复制到上面提到的数组。之后我将在C#项目的后续步骤中使用它。

问题出在我用许多内核进行一些计算然后使用cudaMemcpy()将数据从设备复制到主机。第一个cudaMemcpy()比后来的类似操作cudaMemcpy()需要更多的时间。

人们说cudaMemcpy()从设备到主机(不是固定内存)是同步的。真的吗?有没有解决方法呢?

非常感谢提前。

1 个答案:

答案 0 :(得分:0)

人们说cudaMemcpy()从设备到主机(不是固定内存)是同步的。这是真的吗?

是的,这是真的。

是否有解决方法?

可以帮助您的一件事是使用Cuda Streams。因此,您将执行与复制重叠。

编辑:

如果你不能使用流,那么我知道没有可行的解决方法。

您可以考虑的事情之一就是我在评论中提到的是在GPU上构建整个应用程序,以便您完全避免内存传输(或者可以考虑将非常少的字节复制到CPU)。这实际上取决于应用程序的类型。在您的情况下可能会或可能不会。