cudaStreamSynchronize と CudaDeviceSynchronize と cudaThreadSynchronize の比較 質問する

cudaStreamSynchronize と CudaDeviceSynchronize と cudaThreadSynchronize の比較 質問する

これら3つの関数、特に最後の2つの関数の違いは何ですか?ライブラリマニュアルには次のように書かれています。

この関数は、名前がその動作を反映していないため非推奨であることに注意してください。その機能は非推奨ではない関数 cudaDeviceSynchronize() に似ているため、代わりにこちらを使用する必要があります。

しかし、それが何を意味するのかよく分かりません。

ベストアンサー1

これらはすべて障壁バリアは、何らかの条件が満たされるまで、バリアを超えたコードの実行を防止します。

  1. cudaDeviceSynchronize()GPU が以前に要求されたすべての cuda タスク (カーネル、データ コピーなど) の処理を​​完了するまで、CPU/ホスト スレッド (cudaDeviceSynchronize が発行されたスレッド) の実行を停止します。
  2. cudaThreadSynchronize()ご存知のとおり、 は の非推奨バージョンですcudaDeviceSynchronize。非推奨とは、現時点ではまだ動作しますが、使用しないことが推奨され (代わりに cudaDeviceSynchronize を使用してください)、将来的にはサポートされなくなる可能性があることを意味します。ただし、cudaThreadSynchronize() とcudaDeviceSynchronize() は似ています。
  3. cudaStreamSynchronize()上記の2つの関数に似ていますが、GPUが以前に要求されたすべてのcudaタスクの処理を完了するまで、CPUホストスレッドでのそれ以上の実行を防止します。参照されたストリームで発行されたものしたがって、cudaStreamSynchronize() はストリーム ID を唯一のパラメータとして受け取ります。他のストリームで発行された cuda タスクは、CPU コードの実行がこのバリアを超えて継続すると、完了する場合と完了しない場合があります。

おすすめ記事