0

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

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

1 回答 1

3

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

如果您不使用任何流,则使用默认流(又名流“0”),并且您不会获得并发(就像cudaDeviceSynchronize()在每个 CUDA 操作之前和之后插入一样,参见这些幻灯片)。

但是,如果KerA在流 0 中运行,KerBKerC在流 1 中运行,您将得到您想要的,即 and 之间的同步调用KerBKerC它们是异步的 wrt KerA。您可以使用它cudaStreamSynchronize(streamid)来同步特定的流。

Time ------------------------------------>
| Stream 0: KerA ------------------------>
| Stream 1: KerB ------> | KerC --------->

我链接的幻灯片中提供了示例。您还可以查看 SDK 的simpleStreamsconcurrentKernels示例。

于 2013-05-07T13:22:40.363 回答