問題タブ [nvprof]
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.
cuda - CUDA nvprof 'API Trace' と 'GPU Trace' が同期されていません - どうすればよいですか?
CUDA 7.0 プロファイラーを使用して、nvprof
CUDA 呼び出しを行うプロセスをプロファイリングしています。
その後、2 つのトレースを生成します。「API トレース」(ホスト CPU で発生すること、たとえば CUDA ランタイム呼び出しとマークした範囲) と「GPU トレース」(カーネル実行、memset、H2D、D2H など) です。
各トレースのすべてのレコードには、タイムスタンプ (または開始時刻と終了時刻) があります。問題は、これら 2 つのトレースの時間値 0 が同じではないということです。GPU トレースの時間 0 ポイントは、関連するプロセスによってトリガーされた GPU での最初の操作の実行が開始されたときを示しているように見えますが、API トレースの時間 0 ポイントはプロセス実行の始まり、またはその前後のようです。
nvvp
を使用してインポートすると、値が修正されることにも気付きました。つまりout.nvprof
、最初の GPU op の開始時間が 0 ではなく、より現実的なものになります。
2 つのトレース間の正しいオフセットを取得するにはどうすればよいですか?
cuda - CUDA プロファイラーの出力 (nvprof) について
次の出力を見て、数字に頭を悩ませようとしています。
メモリ アクセスの最適化に関して、さまざまな実装を比較するときに実際に確認する必要がある数値は何ですか? 最初は(両方向に)memcpy
取るだけのように見えますが、さらに多くの API 呼び出し:があります。また、最小/平均/最大列は、上位出力ブロックと下位出力ブロックの間で加算されません。117.53+107.32ms
cudaMemcpy
41.8256s
なぜ違いがあり、メモリ転送を最適化するために重要な「真の」数は何ですか?
EDIT : 2 番目の質問は、たとえば、誰がaxpy_kernel_val
(そして何回) 呼び出しているかを把握する方法はありますか?
cuda - 実行可能ファイルのサブセクションの CUDA イベントとメトリクスを観察する方法 (例: カーネル実行時のみ)?
nvprof を使用してベンチマークのイベントとメトリックにアクセスすることに慣れています。
の
コマンドは、開始時刻、カーネル終了時刻、電力、温度のタイムスタンプを提供し、情報を nvvp ファイルに保存して、ビジュアル プロファイラーで表示できるようにします。これにより、特に特定のカーネルが実行されているときに、コードの任意のセクションで何が起こっているかを確認できます。私の質問はこれです--
カーネルの実行中など、ベンチマーク実行のセクションのみでカウントされるイベントを分離する方法はありますか? 上記のコマンドでは、
実行可能ファイル全体について集計された指示を与えるだけです。ありがとう!
cuda - CUDA nvprof 出力をビジュアル プロファイラーにエクスポートする
GPU アプリケーションの制限を確認するために、GPU アプリケーションからデータを抽出したいと考えています。アプリケーションはリモート サーバー上で実行されるため、 nvprofを使用する必要があるため、 Visual Profilerでローカルにインポートするファイルを作成する必要があります。を使用してファイルを作成しようとしましたnvprof -o file_name <app> <params>
がnvprof --analysis-metrics --output-profile file_name <app> <params>
、Visual Profiler でこれらのファイルをインポートすると、[分析] セクションでいくつかのフィールドが空になります: 「不十分なグローバル メモリ ロード データ」、「不十分なグローバル メモリ ストア データ」、「不十分なカーネル」 SMデータ」……。分析セクションのすべての情報を取得するために、ファイル (またはそれ以上) を生成するにはどうすればよいですか? flagsを指定してnvccでcuda コードをコンパイルします-lineinfo -arch compute_20 -code sm_20 --ptxas-options=-v
。空のフィールドの例を次に示します。
cuda - 最新の Nvidia CUDA Profiler ユーザー ガイドで欠落している式はどこにありますか
以前のバージョンのプロファイラー ユーザー ガイドでは、メトリックの数式が提供されていることがわかりました。
例えば、
しかし最新版では、この「式」の部分が「スコープ」に置き換わっています。最新のプロファイラーの数式がどこにあるか知っている人はいますか? nvprof はより多くの機能とメトリックを追加するため、nvprof v5.0 以前で提供された古いバージョンの数式を引き続き使用できるかどうかはわかりません。
c++ - CUDA の同時カーネル起動が機能しない
画像処理用のCUDAプログラムを書いています。同じカーネル「processOneChannel」が RGB チャネル用に起動されます。
以下では、3 つのカーネル起動のストリームを指定して、同時に処理できるようにします。しかし、nvprof は、それらがまだ次々と起動されていると言っています...
これら 3 つのカーネルの前後に 2 つのカーネルがあり、それらを同時に実行したくありません。
基本的には次のものが必要です: seperateChannels --> processOneChannel(x3) --> recombineChannels
私が間違ったことをアドバイスしてください..
nvprof gpu トレース出力は次のとおりです。カーネルの起動前の memcpy は、処理のためにフィルター データを渡すためのものであるため、カーネルの起動と同時に実行できないことに注意してください。
-default-stream per-thread を nvcc に渡した CMakeList.txt を次に示します。
c - nvprof が API 呼び出しまたはカーネルを取得しない
nvprof を使用して CUDA プログラムでベンチマーク タイミングを取得しようとしていますが、残念ながら、API 呼び出しまたはカーネルをプロファイリングしていないようです。私はそれを正しく行っていることを確認するために簡単な初心者向けの例を探し、次の Nvidia 開発ブログで見つけました。
https://devblogs.nvidia.com/parallelforall/how-optimize-data-transfers-cuda-cc/
コード:
コマンドライン:
そのため、一語一語、一行一行複製し、同一のコマンドライン引数を実行しました。残念ながら、私の結果は同じでした:
Nvidia ツールキット 7.5 を実行しています
誰かが私が間違っていることを知っているなら、答えを知って感謝します。
-----編集-----
だから私はコードを次のように変更しました
残念ながら、それは物事を変えませんでした。