我想通过调用cudaMemcpy
在两个CUDA设备(支持UVA)之间复制内存。我想知道这个呼叫是否与主机同步?我知道同一设备中的cudaMemcpy
是异步的,但不同设备之间的副本又如何呢?我是否需要致电cudaDeviceSynchronize
以确保复制已完成或自动确保?
我也有类似的关于cublas的问题。我想将存储在一台设备上的矢量添加到存储在另一台设备上的矢量,因此我正在调用cublasSaxpy
。是否会阻止主机直到操作完成,或者我需要显式同步?
答案 0 :(得分:1)
我知道同一设备中的cudaMemcpy是异步的
文档说:“此函数表现出大多数用例的同步行为。” (我的重点)。但是,尽管cudaMemcpy()
在某些极端情况下确实表现出异步行为,但这些相同的极端情况具有否定该行为的行为。最终结果是,在进行对等拷贝时,您可以依赖cudaMemcpy()
同步。
如果您需要异步行为,则应致电cudaMemcpyAsync()
。
CUBLAS API在很大程度上是异步的,包括cublasSaxpy
。一些例外是返回标量的一些调用。