私はカーネルKerA
をKerB
非同期で呼び出します。カーネルは仕上げKerC
に依存しますが、独立しています。では、終了するのを待つが終了しないことを意味する方法で呼び出す方法は?KerB
KerA
cudaDeviceSynchronize()
KerC
KerB
KerA
Time -------------------------->
| KerA ------------------------>
| KerB ------> | KerC --------->
私はカーネルKerA
をKerB
非同期で呼び出します。カーネルは仕上げKerC
に依存しますが、独立しています。では、終了するのを待つが終了しないことを意味する方法で呼び出す方法は?KerB
KerA
cudaDeviceSynchronize()
KerC
KerB
KerA
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
またはconcurrentKernels
SDK のサンプルも確認できます。