0

CUDA 7.0 プロファイラーを使用して、nvprofCUDA 呼び出しを行うプロセスをプロファイリングしています。

$ nvprof -o out.nvprof /path/to/my/app

その後、2 つのトレースを生成します。「API トレース」(ホスト CPU で発生すること、たとえば CUDA ランタイム呼び出しとマークした範囲) と「GPU トレース」(カーネル実行、memset、H2D、D2H など) です。

$ nvprof -i out.nvprof --print-api-trace --csv 2>&1 | tail -n +2 > api-trace.csv
$ nvprof -i out.nvprof --print-gpu-trace --csv 2>&1 | tail -n +2 > gpu-trace.csv

各トレースのすべてのレコードには、タイムスタンプ (または開始時刻と終了時刻) があります。問題は、これら 2 つのトレースの時間値 0 が同じではないということです。GPU トレースの時間 0 ポイントは、関連するプロセスによってトリガーされた GPU での最初の操作の実行が開始されたときを示しているように見えますが、API トレースの時間 0 ポイントはプロセス実行の始まり、またはその前後のようです。

nvvpを使用してインポートすると、値が修正されることにも気付きました。つまりout.nvprof、最初の GPU op の開始時間が 0 ではなく、より現実的なものになります。

2 つのトレース間の正しいオフセットを取得するにはどうすればよいですか?

4

1 に答える 1

3

ドキュメントからnvprof明らかではないかもしれませんが、アプリのプロファイリングを行っているのか、以前にキャプチャしたプロファイラー出力ファイルから情報を抽出しているかに関係なく、とからの出力をリクエストするときに両方を指定することができ--print-gpu-traceます。--print-api-tracenvprof

アプリをプロファイリングしている場合、次のようにすると、API アクティビティと GPU アクティビティの両方について「調和した」タイムラインが生成されます。

nvprof --print-gpu-trace --print-api-trace ./my_app

--log-fileオプションを使用して出力を保存できます。

同様に、以前にキャプチャした出力ファイル (ログ ファイルとは異なります) から出力を抽出する場合は、次のようなことができます。

nvprof -i profiler_out_file --print-gpu-trace --print-api-trace ...

whereはオプションprofiler_out_fileを使用して以前に保存したファイルの名前です。nvprof -o ...

ここでは、2 つの (結合された) タイムラインを同じ時点で開始するために、同じコマンドで両方のトレースを印刷することが不可欠です。2 つのコマンドを発行して、それぞれ別のトレースを出力すると、「調和」されない場合があります。

于 2015-04-09T22:00:27.477 に答える