消えた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をしてみたけれど期待された情報が出てきませんでした...。)
--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