cudaMemcpy和cublas是否以点对点模式阻止?

时间:2014-03-14 15:37:45

标签: cuda cublas multi-gpu

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

我也有类似的关于cublas的问题。我想将存储在一台设备上的矢量添加到存储在另一台设备上的矢量,因此我正在调用cublasSaxpy。是否会阻止主机直到操作完成,或者我需要显式同步?

1 个答案:

答案 0 :(得分:1)

  

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

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

如果您需要异步行为,则应致电cudaMemcpyAsync()

CUBLAS API在很大程度上是异步的,包括cublasSaxpy。一些例外是返回标量的一些调用。