工具箱
通常情况下,开发者会结合使用这两个工具:Nsight Systems 用于识别性能瓶颈的区域,然后使用 Nsight Compute 对这些区域进行更深入的分析和优化。
1. Nsight Systems [整个系统的分析]
提供系统范围的性能分析,关注应用程序在整个系统中的行为,包括 CPU、GPU、内存和网络。它更适合于整体性能调优和瓶颈识别。
2. Nsight Compute [kernel的深入分析]
提供对 CUDA 内核的深入分析,关注内核的性能,例如内存访问模式、分支预测和寄存器使用情况。它更适合于 CUDA 代码的微调和优化。其中也集成到了Occupancy Calculator 工具 (https://docs.nvidia.com/nsight-compute/NsightCompute/index.html#occupancy-calculator)
3. Occupancy Calculator:
你可以改变5个数值:SM 版本,Shared memory 大小,Block大小,每个Thread的register个数,每个Block 的 Shared memory 大小。 然后系统会根据给出配置和硬件极限 计算出 GPU 的 占用率。即这个SM 中的 warp 占用百分比。
还有信息包括 资源实际分配情况。
调配置,使得 GPU 占用率尽量大到 100%。
3. nvprof
nvprof ./a.out 返回每个操作的耗时。根据此,可以简历优化的优先级。
初始化不一定在 host 端
CUDA程序的一个基本规则是,尽可能减少 host 与 device 间的数据交换。比如 代操作数据为二维或三维点,一个技巧是,为了尽可能减少数据传输,线程 id 天然可以表示成数据点的坐标:(idx,idy)<=>(x,y).