2017-11-07 17 views
0

cudaStreamAddCallback()経由でコールバックを登録すると、どのスレッドがそれを実行するのですか?cudaStreamAddCallbackに渡されたコールバックを実行するスレッドは何ですか?

CUDAのドキュメントはcudaStreamAddCallback

は、ストリーム内のすべての現在キューに入れられた項目が完了した後にホストに呼び出されるコールバックを追加することを言います。 cudaStreamAddCallbackコールごとに、コールバックが1回だけ実行されます。コールバックは、後でストリームが終了するまでブロックします。

しかし、コールバック自体がどのように呼び出されるかについては何も言及していません。

短い答えは、これはCUDAランタイムの内部実装の詳細であり、あなたがする必要がないことである:この質問の答えを持っており、未回答キュー落ちるようにするだけのコメントを肉付けする

+2

これは、CUDAドライバによって起動され、管理されるスレッドです。 CUDAプログラミングモデルで明白に見えるものではありません。このスレッドを作成または管理するために明示的に何もする必要はありません。コールバックが開始されたストリームがコールバックに到達すると(つまり、そのストリームに発行された以前のすべてのアクティビティが完了したとき)コールバックが呼び出されます。 –

答えて

1

それを心配してください。

もっと長い答えは、CUDAランタイムの動作を注意深く見れば、デバイス上のコンテキスト確立(ドライバAPIを介して明示的であるか、ランタイムAPIを介して暗黙的であるか)によって小さなスレッドプール。これらのスレッドは、ストリームコマンドキューやコールバック操作のようなランタイムの機能を実装するために使用されます。ここでもプログラマが知る必要のない内部実装の詳細。

関連する問題