CUDAでの同期および非同期
Synchronous Asynchronous Cuda
これらはすべて障壁です。バリアは、何らかの条件が満たされた場合に、バリアを超えてコードが実行されるのを防ぎます。
-
cudaDeviceSynchronize()
GPUが以前に要求されたすべてのcudaタスク(カーネル、データコピーなど)の処理を終了した場合、CPU /ホストスレッド(cudaDeviceSynchronizが発行されたスレッド)での実行を停止します。 -
cudaThreadSynchronize()
ご存知のとおり、これはcudaDeviceSynchronizeの非推奨バージョンにすぎません。非推奨とは、現時点ではまだ機能していることを意味しますが、使用しないことをお勧めします(代わりに、cudaDeviceSychronizeを使用してください)。将来、サポートされなくなる可能性があります。ただし、cudaThreadSynchronize()とcudaDeviceSynchronize(0)は基本的に同じです。 -
cudaStreamSynchronize(0)
上記の2つの関数に似ていますが、GPUが参照ストリームで発行された以前に要求されたすべてのcudaタスクの処理を終了するまで、CPU /ホストスレッドでのそれ以上の実行を防ぎます。したがって、cudaStreamSynchronize()は、唯一のパラメータとしてストリームIDを取ります。他のストリームで発行されたcudaタスクは、CPUコードの実行がこの障壁を超えて継続すると、完了する場合と完了しない場合があります。