NVVP/nvprofのサポート終了と代替品
消えたCUDA関連の旧ブログ記事を復元するひとり Advent Calendar 2024の記事です。
NVVP/nvprofのサポート終了と代替品
NVVP/nvprofはVoltaアーキテクチャをもってサポートが終了しています。[詳しく]
If you use the NVIDIA Visual Profiler or the nvprof command line tool, it’s time to transition to something newer: NVIDIA Nsight Tools.
(引用 Migrating to NVIDIA Nsight Tools from NVVP and Nvprof - NVIDIA Developer Blog - 2019.07.15)
nvprofからnsysに移行
この記事は
nvprof ./a.outと同じようなことをnsysで行うにはどうすればいいかを書きます。
結論から言うと
nsys nvprof ./a.outです。
nvprofのオプションもそのままいい感じにnsysのオプションに翻訳してくれるよう努力してくれるらしいです。
--print-gpu-traceも使えます。
nsysではcudaMemcpyとカーネル関数の実行が別々に統計を取られるなど、nvprofと少し違う部分もあります。
nsysのUsage
nsysのUsageは
nsys [command_switch] [optional command_switch_options] [application] [optional application_options]となっています。
nsys nvprof ./a.outは
nsys profile --stats=true --trace=cuda,nvtx ./a.outへと翻訳されている気がします。
nsysではデフォルトでプロファイリング結果をファイル出力するため、--stats=trueオプションで標準エラー出力に出力します。
また、デフォルトではpthread_createなどのOperating System Runtime APIも集計するため、--trace=cuda,nvtxで必要なものだけを集計するように制限しています。
nsysでもcudaProfilerStart/Stop関数によるプロファイリング範囲の指定ができます。
この場合はcommand_switchとしてlaunch/start/stopなどを指定してnsysを用います。
CUDAのDocumentationで例と一緒に詳しく書いているので、使いたい方はそちらを参照してください。
NVIDIA Nsight Systems - NVIDIA DEVELOPER
nv-nsight-cliについて
nv-nsight-cliはNsight ComputeのCLI用のコマンドです。
nv-nsight-cliを用いると何ができるかというと、カーネル関数のキャッシュヒット率やメモリのバンド幅の使用率などをプロファイルできます。
X11 forwardingでNsight Computeを飛ばすのができないときや面倒なとき、プロファイリング結果をファイルに出力してローカルにもってくるのが面倒なときなどにとても便利です。
例えばこんな感じです。
nv-nsight-cu-cli ./a.out
a.out, 2020-Jun-13 10:03:46, Context 1, Stream 7 Section: GPU Speed Of Light ---------------------------------------------------------------------- --------------- ------------------------------ DRAM Frequency cycle/nsecond 1.70 SM Frequency cycle/nsecond 1.50 Elapsed Cycles cycle 821,906 Memory [%] % 16.70 SOL DRAM % 0.00 Duration usecond 544.45 SOL L1/TEX Cache % 18.77 SOL L2 Cache % 6.13 SM Active Cycles cycle 813,724.26 SM [%] % 75.20 ---------------------------------------------------------------------- --------------- ------------------------------ WRN Compute is more heavily utilized than Memory: Look at the Compute Workload Analysis report section to see what the compute pipelines are spending their time doing. Also, consider whether any computation is redundant and could be reduced or moved to look-up tables. Section: Launch Statistics ---------------------------------------------------------------------- --------------- ------------------------------ Block Size 256 Grid Size 131,072 Registers Per Thread register/thread 16 Shared Memory Configuration Size Kbyte 32.77 Driver Shared Memory Per Block byte/block 0 Dynamic Shared Memory Per Block byte/block 0 Static Shared Memory Per Block byte/block 0 Threads thread 33,554,432 Waves Per SM 712.35 ---------------------------------------------------------------------- --------------- ------------------------------ Section: Occupancy ---------------------------------------------------------------------- --------------- ------------------------------ Block Limit SM block 16 Block Limit Registers block 16 Block Limit Shared Mem block 16 Block Limit Warps block 4 Theoretical Active Warps per SM warp/cycle 32 Theoretical Occupancy % 100 Achieved Occupancy % 78.69 Achieved Active Warps Per SM warp 25.18 ---------------------------------------------------------------------- --------------- ------------------------------詳しくはこちらをどうぞ。 Nsight Compute CLI - NVIDIA Developer zone