0

我想通过调用在两个 CUDA 设备(支持 UVA)之间复制内存cudaMemcpy。我想知道调用是否与主机同步?我知道cudaMemcpy在同一设备内是异步的,但是不同设备之间的副本呢?我是否需要打电话cudaDeviceSynchronize以确保复制已完成或自动确保复制?

我也有关于cublas的类似问题。我想将存储在一个设备上的向量添加到存储在另一个设备上的向量中,所以我呼吁cublasSaxpy这样做。它会阻塞主机直到操作完成,还是我需要显式同步?

4

1 回答 1

1

我知道同一设备中的 cudaMemcpy 是异步的

文档说,“这个函数在大多数用例中表现出同步行为。” (我的重点)。然而,尽管cudaMemcpy()在某些极端情况下确实表现出异步行为,但那些相同的极端情况具有否定该行为的行为。最终结果是您可以依赖cudaMemcpy()同步,在进行点对点复制时也是如此。

如果你需要异步行为,你应该调用cudaMemcpyAsync().

CUBLAS API 大部分是异步的,包括cublasSaxpy. 一些返回标量的调用例外。

于 2014-03-14T17:52:21.340 回答