2017-03-07 18 views
1

私はCUDAストリームとイベントについて読んでいました。以下のリンクのスレッドから、司会者が言った(私は引用しています):CUDAのストリームとイベント:明確化

ストリームに提出されたコマンドは、順番に完了することが保証されています。アプリケーションがグリッドランチとイベントレコードをストリームに送信すると、ドライバはグリッドランチ、同期コマンド、およびイベントレコードを接続にプッシュします。フロントエンドは、カーネルの起動が完了して同期トークンがクリアされるまで、イベント記録コマンドを処理しません。 接続がブロックされています。コンピューティング機能3.5デバイスでは、フロントエンドは他の接続を処理し続けることができます。計算機能< 3.5デバイスでは、フロントエンドは単にブロックされます。

は私が懸命に試みたが、司会者は、接続がブロックされていることを述べ、なぜ私が理解することはできません。何か説明してください。ありがとうございました。

スレッドURL:このコンテキストでhttps://devtalk.nvidia.com/default/topic/599056/concurrent-kernel-and-events-on-kepler/?offset=4

+0

このコンテキストでの接続は、コマンドキューのように機能します。 <3.5のコンピューティング機能を持つデバイスには、単一の接続/コマンドキューしかありません。論理的には複数のストリームが存在する可能性がありますが、コマンドがデバイスに送信されるまでには、それらはすべて同じキューで終了し、お互いをもう追い越すことはできません。したがって、イベントを記録するような、デバイス側をブロックする1つのコマンドは、他のすべてのブロックをブロックします。それ以降のデバイスは複数の接続をサポートしているため、各ストリームは独自のコマンドキューを取得します(いくつかの制限まで)。 – tera

+0

@tera:それを追加したい場合は完璧な答えです。 – talonmies

答えて

3

接続は、コマンド・キューのように振る舞います。計算機能を備えたデバイス< 3.5には、接続/コマンドキューが1つしかありません。論理的には複数のストリームが存在する可能性がありますが、コマンドがデバイスに送信されるまでには、それらはすべて同じキューで終了し、お互いをもう追い越すことはできません。

だから、ブロック、他のすべてのイベントを記録するように、デバイス側を遮断する一つのコマンド。 Later devices support multiple connections、各ストリームは独自のコマンドキューを取得します。