cublasSetMatrixAsync是否在默认流阻塞?

时间:2014-12-23 23:03:13

标签: asynchronous cuda

我想将数据从主机复制到设备并并行运行一些内核。关于运行cublasSetMatrixAsync函数调用是否会在默认流上阻塞,似乎存在相互矛盾的信息?

我看到它阻止执行,我想知道使用它的正确方法是什么。 cublasSetMatrixAsync应该在非默认流上吗?如果是这样,如果将来某个内核需要设备上的矩阵,是否有一种简单的方法可以阻止默认流?

1 个答案:

答案 0 :(得分:1)

是的,它有阻止行为。

来自programming guide

  

如果主机线程在它们之间发出以下任何一个操作,则来自不同流的两个命令不能同时运行:   ...

     

对默认流的任何CUDA命令

cublasSetMatrixAsync不能免除此事。

CUDA并发的一般规则是,如果您需要,请不要使用默认流。

  

如果将来某个内核需要设备上的矩阵,是否有一种简单的方法可以阻止默认流?

发出cudaDeviceSynchronize()

这将强制所有cuda设备活动在与该设备关联的任何流中完成,然后才能开始向与该设备关联的任何流发出的任何后续命令。