私はカーネルKerAをKerB非同期で呼び出します。カーネルは仕上げKerCに依存しますが、独立しています。では、終了するのを待つが終了しないことを意味する方法で呼び出す方法は?KerBKerAcudaDeviceSynchronize()KerCKerBKerA
Time -------------------------->
| KerA ------------------------>
| KerB ------> | KerC --------->
私はカーネルKerAをKerB非同期で呼び出します。カーネルは仕上げKerCに依存しますが、独立しています。では、終了するのを待つが終了しないことを意味する方法で呼び出す方法は?KerBKerAcudaDeviceSynchronize()KerCKerBKerA
Time -------------------------->
| KerA ------------------------>
| KerB ------> | KerC --------->
これは、CUDA ストリームを使用して実現できます。
ストリームを使用しない場合、デフォルト ストリーム (別名ストリーム '0') が使用され、同時実行性は得られません (cudaDeviceSynchronize()すべての CUDA 操作の前後に が挿入されているかのように、これらのスライドを参照してください)。
ただし、KerAストリーム 0 でKerB実行KerCし、ストリーム 1 で実行するKerBとKerC、目的のものが得られますKerA。cudaStreamSynchronize(streamid)特定のストリームと同期するために使用できます。
Time ------------------------------------>
| Stream 0: KerA ------------------------>
| Stream 1: KerB ------> | KerC --------->
例は、私がリンクしたスライドにあります。simpleStreamsまたはconcurrentKernelsSDK のサンプルも確認できます。