我想将数据从主机复制到设备并并行运行一些内核。关于运行cublasSetMatrixAsync函数调用是否会在默认流上阻塞,似乎存在相互矛盾的信息?
我看到它阻止执行,我想知道使用它的正确方法是什么。 cublasSetMatrixAsync应该在非默认流上吗?如果是这样,如果将来某个内核需要设备上的矩阵,是否有一种简单的方法可以阻止默认流?
答案 0 :(得分:1)
是的,它有阻止行为。
如果主机线程在它们之间发出以下任何一个操作,则来自不同流的两个命令不能同时运行: ...
•对默认流的任何CUDA命令
cublasSetMatrixAsync
不能免除此事。
CUDA并发的一般规则是,如果您需要,请不要使用默认流。
如果将来某个内核需要设备上的矩阵,是否有一种简单的方法可以阻止默认流?
发出cudaDeviceSynchronize()
这将强制所有cuda设备活动在与该设备关联的任何流中完成,然后才能开始向与该设备关联的任何流发出的任何后续命令。