文章

使用 Nsight Compute 进行 kernel 性能分析

使用 Nsight Compute 进行 kernel 性能分析

编译时,加上 -lineinfo 参数,Nsight Compute 分析时,可以看到具体的 C++/cu 代码。

1. Bank Conflicts 分析

在性能指标 Shared Load 这一行中,有如下几列,其含义如下表:

项目解释
InstructionsGMEM -> SMEM Load 指令总数
RequestsGMEM -> SMEM Load 请求数,每条指令都会生成一个 Request
WavefrontsWavefront 数量,一个 Wavefront 覆盖 128 字节数据

所以只要看 Requests / Wavefronts (>=1)比例,越低表示 Bank Conflicts 越多。从下图看,这两个值接近,即几乎 Warp 内每个线程之间都有 Bank Conflicts。

nsight_shared_memory_load

下一步,就是源码定位:

nsight_source_viewer

从左侧源码定位到 copy.hpp 文件中的 copy 函数,从右侧的汇编信息看到是 GMEM 加载,从右下角的窗口看其调用栈,最终定位到源码的第 144 行:

nsight_call_stack

查看Bank Conflicts 是否严重,从 GPU Speed of Light 节中,查看 L1/TEX Cahce(%) 是否比较高,具体参考论坛帖子:Shared memory bank conflicts and nsight metric

相关资料:

本文由作者按照 CC BY 4.0 进行授权