【问题标题】:Are cudaMemcpy and cublas blocking in peer-to-peer mode?cudaMemcpy 和 cublas 是否在点对点模式下阻塞?
【发布时间】:2014-04-20 00:15:24
【问题描述】:

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

我也有关于 cublas 的类似问题。我想将存储在一个设备上的向量添加到存储在另一个设备上的向量中,因此我为此调用了cublasSaxpy。它会阻塞主机直到操作完成,还是我需要显式同步?

【问题讨论】:

    标签: cuda cublas multi-gpu


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 其实NVIDIA documentationMemory copies between two addresses to the same device memory; 是异步的。但就我而言,我正在做点对点复制,所以我认为它是同步的。 The CUBLAS API is asynchronous for the most part, including cublasSaxpy 即使一个参数存储在另一台设备上?
    • @simon,感谢您的更正。奇怪的是,编程指南比参考有更多关于此的信息。这听起来肯定会让人绊倒。关于cublasSaxpy 的参数存储在另一台设备上,我不知道。这真的会奏效吗?如果是这样,您可以通过计时通话来找出答案。只需比较 cublasSaxpy 单独的时间和一个与 cudaDeviceSynchronize() 一起的时间。
    猜你喜欢
    • 1970-01-01
    • 2012-07-26
    • 1970-01-01
    • 1970-01-01
    • 2017-10-21
    • 2017-07-30
    • 2011-07-14
    • 1970-01-01
    • 2013-11-04
    相关资源
    最近更新 更多