仅为特定内核调用cudaDeviceSynchronize()

时间:2013-05-07 12:48:32

标签: asynchronous cuda gpgpu

我异步调用内核KerAKerB。内核KerC依赖于KerB整理,但与KerA无关。那么如何以这样一种方式调用cudaDeviceSynchronize(),这意味着 KerC等待KerB完成而不是KerA

Time -------------------------->
| KerA ------------------------>
| KerB ------> | KerC --------->

1 个答案:

答案 0 :(得分:3)

您可以使用CUDA流实现此目的。

如果您不使用任何流,则使用默认流(也称为流'0'),并且您不会获得并发(就像在每次CUDA操作之前和之后插入cudaDeviceSynchronize()一样,参见{{ 3}})。

但是,如果{0}在流0中运行,KerAKerB在流1中运行,您将获得所需内容,即KerC和{之间的同步调用{1}},这是异步的wrt KerB。您可以使用KerC来同步w.r.t.一个特定的流。

KerA

我链接的these slides中提供了示例。您还可以查看SDK的slidessimpleStreams个样本。