CUDA 7.0 プロファイラーを使用して、nvprof
CUDA 呼び出しを行うプロセスをプロファイリングしています。
$ 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 つのトレース間の正しいオフセットを取得するにはどうすればよいですか?