30

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

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

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

4

1 に答える 1

52

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

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