2013-06-05 19 views
7

Tesla T10プロセッサ(計算機能1.3)からTesla M2075(計算機能2.0)に書き込んだアルゴリズムを切り替えようとしています。切り替え中、私のアルゴリズムが遅くなるのを見て驚いた。私はそれを分析し、それが新しいマシンでは川が流れていないことが原因であると思われることがわかりました。私のアルゴリズムには、メモリ再編成(CPU上で実行可能)、ホストからデバイスへのメモリコピー、およびデバイス上のカーネル実行の3つの主要タスクが並行して実行できます。以前のカーネルが実行されるまで、CPUの計算を開始する前に、新しいマシンにしかしストリームブロックを Correct stream executionCUDAストリームがブロックされている理由を確認する方法

:古いマシン分割でストリームは3つのタスクは次のように(NVidiaのビジュアルプロファイラーからのすべてのスクリーンショット)をオーバーラップすることができここで見られるように、すべてのオレンジ色のブロックは、そのカーネルが完全に異なるストリーム上にあっても、前のカーネルが実行されるまでブロックされるcudaStreamSynchronizeコールです(上の行を見ることができます)。ストリームを最初に実行して正しく並列化するように見えますが、それ以降は問題が始まるので、何かをブロックしていると思って、ストリームの数を増やしてこの結果を得ました。 12 stream execution

何らかの理由で最初の4つのストリームだけがブロックされていることがわかります。その後、ストリームが正しく並列化を開始します。最後の試みとして、最初の4つのストリームを1回だけ使用し、その後のストリームを使用するように切り替えることでハックしようとしましたが、まだ動作せず、他のストリームを同時に実行させながら4つのストリームをすべて停止しました: 10 stream execution

私はこの問題の原因となる可能性のあるものとそれを診断する方法について考えています。私は自分のコードを徹底的に見てきましたが、間違いかもしれませんが、それはバグだとは思いません。各ストリームは独自のクラスにカプセル化され、そのクラスのメンバである単一のcudaStream_tへの参照しか持たないので、別のストリームを参照してブロックする方法がわかりません。

私が気付いていないバージョン1.3と2.0との間でストリームが動作する方法にいくつかの変更がありますか?共有メモリが解放されず、それを待たなければならないものかもしれませんか?どのようにこの問題を診断するためのアイデアは歓迎、ありがとうございます。

+1

あなたの問題がNVIDIAフォーラムの次のスレッド(https://devtalk.nvidia)で最近議論されたものと同じであるかどうかは疑問です。com/default/topic/545476/cuda-programming-and-performance/cuda-stream-performance /オプション 'conckerneltrace'をプロファイラの設定に追加する解決策がありました。 – njuffa

+1

windowsまたはlinux?どちらのドライババージョンを使用していますか?あなたのカーネルの起動パラメータは何ですか?あなたは何らかの再生器を投稿できますか? –

+0

NVIDIA Visual Profiler(CUDA 5.0および5.5)には、「同時カーネルプロファイリングを有効にする」オプションもあります。私はこれがCLIオプション 'conckerneltrace'と同じ結果を達成すると思います。それには、CC> = 2.0デバイスが必要であることに注意してください。 – BenC

答えて

3

コードを見ることなく完全にはわかりませんが、コマンドをエンキューする順序に問題があるようです。 2.xデバイスが同時に複数のカーネルを実行し、HtoDとDtoHの両方を同時に扱うことができるため、処理能力1.xと2.xデバイスがストリームを処理する方法には若干の違いがあります。

すべてのHtoD、すべての計算、すべてのDtoHにコマンドをエンキューすると、Teslaカード(1060など)で良好な結果が得られます。

HtoDをコピーして計算し、DtoHをコピーし、HtoDをコピーします...など。フェルミで良い結果が得られます。

ケプラーはどちらの場合も同様に優れています。これはTeslaとFermiの両方のケースでストリーム間で重要ですが、詳細はthis NVIDIA postとお読みください。ストリーム間でオーバーラップすると非常に複雑な問題になる可能性があります。さらにヘルプが必要な場合は、操作をエンキューする順序の一般的な表現が非常に役立ちます。

関連する問題