6

カーネルの実行を memcpyasync とオーバーラップさせようとしましたが、うまくいきません。固定メモリ、異なるストリームなどを使用して、プログラミングガイドのすべての推奨事項に従います。カーネルの実行が重複していることがわかりますが、メモリ転送では重複しません。私のカードにはコピー エンジンと実行エンジンが 1 つしかないことはわかっていますが、実行と転送はオーバーラップするはずですよね?

「コピー エンジン」と「実行エンジン」は、関数を呼び出す順序を常に強制しているようです。[HtoD x2、Kernel、DtoH] を実行する 4 つのストリームで作業が行われます。各ストリームで HtoDx2,Kernel,DtoH serie を発行すると、stream2 のようなプロファイラーで、最初の DtoH 操作が終了するまで HtoD の最初の操作が開始されないことがわかります。最初に各ストリームで HtoD を発行し、次に 2 番目の HtoD、次にカーネル、次に DtoH (幅) を発行すると、重複は見られず、発行順序も GPU によって強制されます。

CUDA SDK にある simpleStreams の例を試してみましたが、同じ動作が見られます。

Visual Profiler と Nsight for VS2008 の両方で問題を示すスクリーン キャプチャをいくつか添付します。

ps。CUDA_LAUNCH_BLOCKING 環境を設定していません

シンプルなストリーム ビジュアル プロファイラー シンプルなストリーム ビジュアル プロファイラー

MyApp Nsight タイムライン幅優先 MyApp Nsight タイムライン幅優先

MyApp Nsight タイムラインの深さ優先 MyApp Nsight タイムラインの深さ優先

編集

追加の x4 カーネル (合計 2HtoD、5 カーネル、ストリームごとに 1DtoH) を配置 --> --concurrent-kernels-off を使用して、または使用せずに nvprof を実行すると、経過時間は同じです。env CUDA_LAUNCH_BLOCKING=1 を設定すると、(コマンドラインから) 7.5% のパフォーマンスの向上が見られます!

システム仕様:

  • ウィンドウズ7
  • 最初の PCI-E スロットに NVIDIA 6800 VGA
  • 2 番目の PCI-E スロットの GTX480
  • NVIDIA ドライバー: 306.94
  • ビジュアルスタジオ 2008
  • CUDA v5.0
  • ビジュアル プロファイラー 5.0
  • Nsight 3.0
4

3 に答える 3

0

TL;DR:この問題は、Nsight モニタの WDDM TDR 遅延オプションが原因です! false に設定すると、問題が発生します。代わりに、TDR 遅延値を非常に高い数値に設定し、「有効」オプションを true に設定すると、問題は解決します。以下に説明するオプション (より一般的) を試してください。これらも問題に関連しているからです!

上記の解決策にたどり着くまでにたどった他の(古い)手順と、その他の考えられる原因については、以下をお読みください。

私は最近、この問題を部分的に解決することができました! それは窓とエアロに固有のものだと思います。これらの手順を試して、結果を投稿して他の人を助けてください! GTX 650 と GT 640 で試しました。

何かを行う前に、オンボード gpu (ディスプレイとして) とディスクリート gpu (計算用) の両方を使用することを検討してください。これは、Windows 用の nvidia ドライバーで問題が確認されているためです。オンボード GPU を使用すると、ドライバーが完全にロードされないため、多くのバグが回避されます。また、作業中もシステムの応答性を維持!

  1. 並行性の問題が、古いドライバー (BIOS を含む)、間違ったコード、機能しないデバイスなどの他の問題に関連していないことを確認してください。
  2. コンピューター>プロパティに移動します
  3. 左側で高度なシステム設定を選択します
  4. 詳細タブに移動します
  5. オン パフォーマンス クリック設定
  6. [視覚効果] タブで、[最適なパフォーマンスに調整する] を選択します。

これにより、エアロとほぼすべての視覚効果が無効になります。この構成が機能する場合は、問題の原因となる正確なボックスが見つかるまで、視覚効果用のボックスを 1 つずつ有効にしてみてください。

または、次のこともできます。

  1. デスクトップを右クリックし、パーソナライズを選択します
  2. 基本テーマの中からエアロのないテーマを選びます。

これも上記と同じように機能しますが、より多くの視覚オプションが有効になっています。私の 2 つのデバイスでは、この設定も機能するので、そのままにしておきます。

これらの解決策を試すときは、ここに戻って結果を投稿してください。

私にとっては、ほとんどの場合(私が作成したタイル張りのdgemm)の問題を解決しましたが、まだ「simpleStreams」を適切に実行して同時実行を達成できないことに注意してください...

更新:この問題は、新しい Windows インストールで完全に解決されました!! 前の手順で一部のケースの動作が改善されましたが、新規インストールですべての問題が解決しました!

この問題を解決するための根本的ではない方法を見つけようとします。レジストリを復元するだけで十分かもしれません。

于 2015-03-18T08:31:49.307 に答える
0

私のコメントで述べたように、CUDA ドライバーには実際にバグがあり、セットアップでストリーミングが機能しません。1.1 機能カード (8800 GTS) と 3.5 機能カード (GTX Titan) をテストしましたが、どちらのカードも正常に動作します。一部の Fermi カードに問題があるようです (私の GTX 480 は動作しません)。

于 2013-05-26T11:49:28.323 に答える
0

私はちょうど同じ問題を抱えていました。バグがあることに同意します。バグは、Windows 用の CUDA ドライバーまたは Windows 自体にあると思います。私は自分のコードをテストしましたが、Linux で (重複して) うまく動作します。

実際、SDK で「simpleStreams」の例をテストできます。Windows で実行されている「simpleStreams」では、カーネルとメモリのコピーがまったく重複していないことがわかりましたが、Linux では完全に機能します。

CUDA 5.0 と Fermi GTX570 を使用しています。8800GT と GTX Titan でのテストでは、Windows の CUDA ドライバーのバグであることに同意します。うまくいけば、すぐに修正されます。

于 2013-05-28T02:24:59.223 に答える