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コードの実行がこの障壁を超えて継続すると、完了する場合と完了しない場合があります。