我异步调用内核KerA
和KerB
。内核KerC
依赖于KerB
整理,但与KerA
无关。那么如何以这样一种方式调用cudaDeviceSynchronize()
,这意味着 KerC
等待KerB
完成而不是KerA
?
Time -------------------------->
| KerA ------------------------>
| KerB ------> | KerC --------->
答案 0 :(得分:3)
您可以使用CUDA流实现此目的。
如果您不使用任何流,则使用默认流(也称为流'0'),并且您不会获得并发(就像在每次CUDA操作之前和之后插入cudaDeviceSynchronize()
一样,参见{{ 3}})。
但是,如果{0}在流0中运行,KerA
和KerB
在流1中运行,您将获得所需内容,即KerC
和{之间的同步调用{1}},这是异步的wrt KerB
。您可以使用KerC
来同步w.r.t.一个特定的流。
KerA
我链接的these slides中提供了示例。您还可以查看SDK的slides或simpleStreams
个样本。