問題タブ [nsight]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
debugging - Linux サーバーで実行されている CUDA プログラムのリモート デバッグとプロファイリング
これが私のシナリオです。Windows マシンで CUDA アプリケーションをプログラムします。パテを使用して、このアプリケーションをリモート Linux (Debian) サーバー (グラフィカル出力なし) でコンパイルして実行します。
アプリケーションをデバッグしてプロファイリングするための最良の方法は何かを知りたいです。Nvidia 製品の Parallel Nsight と Parallel Nsight Monitor について読みました。これは(唯一の)方法ですか?
debugging - デバッグ中に NSight がブレークポイントをスキップする
並列 Nsight デバッガーを使用してデバッグしようとしている cuda アプリケーションがあります。カーネル関数にブレークポイントがあります。しかし、コードをデバッグしようとすると、デバッガーがブレークポイントで停止せず、結果がすぐに出力されません。これについて検索したところ、このような投稿もありました. しかし、プロジェクトのプロパティ ページで [GPU デバッグ情報の生成] をチェックしたところ、既に [はい (-G0)] になっています。また、matrixMulCUDA などの Nvidia サンプル プログラムの 1 つにブレークポイントを設定しました。プログラムを簡単にデバッグして詳細を確認できます。そのため、プログラムをデバッグできるようにするために何をすべきか、または他にどのような設定を変更する必要があるのか 正確にはわかりません。提供したい情報がいくつかあります。 1. Microsoft Visual Studio 2010 を使用しています。 2. GPU カードは NVidia 560ti です。3 CUDA 5.0 と並行して NSight ビジュアル スタジオ バージョン 2.2 を使用しています。
以下は、カーネルを呼び出しているホスト コード関数のスクリーンショットと、ブレークポイントを設定したカーネル関数の一部です。どんな助けでも大歓迎です。
visual-studio-2010 - VS2010 Nsight 3.0、複数の GPU カードですが、1 つのデバイスしか認識できません。
症状:
まず最初に、このボックスに実際に 2 枚の nvidia カードがあることを確認しようとしています。
VS2010 の場合 -> NSight -> Windows -> SystemInfo -> ディスプレイ デバイス
2 つのデバイスがあるように見えることがわかります。
NVIDIA GeForce GTX 560 Ti
NVIDIA GeForce GTX 560 Ti
名前 \.\DISPLAY2
ID PCI\VEN_10DE&DEV_1200&SUBSYS_35151458&REV_A1
状態フラグ なし
しかし
VS2010 -> NSight -> Windows -> SystemInfo -> GPU デバイスまたは CUDA デバイス
値の列が 1 つしか表示されない (「属性」列はカウントされない)
[NVIDIA コントロール パネル] -> [3D 設定] -> [PhysX 構成の設定] の下に 1 つのカードしか表示されない
コードでは、私がするとき
int devCount; cudaGetDeviceCount(&devCount);
devCount は単に「1」になります
その結果、思い通りに特定の GPU を使用するように設定できません。
質問:
私は疑問に思う
これが 1 番目の GeForce カードがモニターによって使用されているためである場合、すべての CUDA 計算は 2 番目のカードで実行され、2 番目のカードのみを認識しますか?
仮定が正しい場合でも、2 つの GPU デバイスで計算を実行できるように、Windows でこれを回避する方法はありますか?
cuda - NSight 3.0 パフォーマンス アナライザー/プロファイラーを備えた VS2010 の実践的な参考資料
VS2010 での NSight 3.0 の実践的なチュートリアル (まあ、または最も近いバージョン) について、誰かがいくつかの良い参考文献を提案できるかどうか疑問に思っています。
ユーザードキュメントは確かに有益ですが、より教育的なものが良いでしょう。
visual-studio-2010 - VS2010 の Nvidia NSight を使用した CUDA パフォーマンス プロファイリング - .nvreport レポート ファイル
アプリのトレースをしました
このレポート ファイルでは:
1.
ドロップダウンで「CUDA -> CUDA Summary」を選択すると
表のランタイム API 呼び出し項目の下
%時間- 80.66
打ち上げ
%デバイス時間- 15.46
他のすべての時間のパーセンテージはほぼ 0% です
ここで私の質問は、時間の 19.34% とデバイス時間の 84.54% の残りはどこにあるのかということです。つまり、完全に異なる「合計時間」値に対するパーセンテージを意味する場合は?
2.
推力ベクトルを使用して、データを前後にコピーしました。このレポートの「メモリ コピー」セクションで、実行時のメモ コピーの % Time 値はすべて無視できるようです。
しかし、Runtime API Calls (80.66 という高い % Time 値を持つ) の「概要」リンクをクリックすると、犯人である「cudaMemcpy」の「Capture Time %」値が高いことがすぐにわかります。この「Runtime API Calls Summary」ページの73.75 として。
ここでの私の質問はそれです
- これは、レポートの「メモコピー」セクションに表示されていなくても、私のボトルネックが依然として throw::copy() への呼び出しであることを意味しますか?
- また、一般的に最もコストがかかる正確な関数呼び出しを実際に見つけるにはどうすればよいでしょうか?
- タイムライン機能は、これらのいずれかでどのように役立ちますか?
c++ - CUDA: なぜ特定のメモのコピー操作は、他の同様の操作よりも常に 10 倍のコストがかかるのですか?
次のコードは典型的なものを実行すると思います
- デバイスにコピー
- カーネルを呼び出す
- ホストにコピーバック
ワークフロー。
私が非常に奇妙なことに気付いたのは、NSight Profiler で Trace Application オプションを使用したとき、レポートで「スタック トレース」をオンにして、最もコストのかかる操作が太字の行であることがわかりました。他の memoCopy 操作のコストは、この memoCopy 操作の 10% 以下にすぎません。
これは、カーネルを呼び出した後の最初の行であるため、プロファイラーが何らかの同期のコストをこの特定の memoCopy 操作のコストに含めたためですか?
私が取り組んでいる問題のような、非常に頻繁な同期と結果をホストに「返す」必要がある問題について、ベストプラクティスに関する一般的なアドバイスを誰かが提供できますか? 特に 2 つのオプションについて考えていましたが、最終的に役立つかどうかはわかりません
- 「ゼロコピー」メモリを使用する (例 11.2 による CUDA)
- アトミック操作を使用して my how 同期を作成する
{
}