第 7 章 使用Nsight优化程序
前文提到了使用流增加并行性,但是如何判比较据拷贝和计算分别占用的时长呢?这里隆重介绍一下Nsight。
Nsight可以对一个程序运行期间设备的行为进行采样,并在一个时间轴上画出来。这样就可以方便地分析数据传输延迟是不是产生了比较大的影响,计算和数据拷贝是不是可以更加高效地并行等等。
Nsight可以通过SSH连接到远程机器来监控程序运行情况,因此可以在本地安装Nsight来对服务器上的程序进行调试。
7.2 连接到服务器
如图,设置好服务器地址,ssh端口和用户名。点击connect即可连结。

图 7.1: nsight
7.3 分析程序
如图,勾选要分析的部分,比如下面的“Collect CUDA trace”.
然后在Working directory里面填上工作目录,在Command line with arguments里填上可执行文件和需要的参数。
在右边点击start即可开始分析。但是远程分析无法自动停止,因此需要估计好程序运行时间,然后点stop。

图 7.2: nsight_prof
7.4 查看报告
停止以后,会出现一个“Report 1”标签页,里面有分析报告。上面可以看到时间轴,可以直观地看出各种调用占用的时间。
使用Ctrl+鼠标滚轮可以缩放时间轴。

图 7.3: nsight_rep
7.5 Nsight Compute
Nsight Compute可以更细致地分析CUDA程序的行为。用Nsight Compute远程连接到服务器似乎不太好操作,可以直接在服务器上使用Nsight Compute。
首先,需要使用“-Y”参数来连接服务器ssh。(“-Y”表示传输图形而不只是文字信息)
在服务器上,直接运行(前提是加载了cuda
模块)
即可打开界面。
Nsight Compute可以查看程序的缓存命中率,各种指令的使用情况,核心占用率等等信息。具体使用方法参见:
此功能需要管理员权限。尝试了开启非管理员使用的选项,但似乎会导致系统不稳定。如果本地有CUDA环境请在本地使用Nsight Compute调试。如果需要在服务器上使用,请联系管理员。