一、CUDA 编译器工具(nvcc
)
nvcc
是 CUDA 程序的主要编译器,用于编译 .cu
源文件和混合编译 C/C++ 代码。
常用命令与选项:
# 基本编译命令
nvcc source.cu -o output # 编译单个 CUDA 源文件
nvcc source.cu host_code.cpp -o output # 混合编译 CUDA 和 C++ 代码
# 编译选项
--arch=compute_XX # 指定 GPU 架构(XX 为算力,如 75、86)
--code=sm_XX # 生成对应架构的二进制代码
-g # 开启调试信息(配合 gdb 调试)
-G # 生成未优化的调试代码
-O0/-O1/-O2/-O3 # 优化等级(默认 O2)
-lcudart # 链接 CUDA 运行时库(通常自动链接)
-lcublas # 链接 cuBLAS 库(需手动指定第三方库)
--ptx # 生成 PTX 中间代码(用于分析)
--cubin # 生成二进制 Cubin 文件
--keep # 保留临时文件(调试用)
--device-debug # 启用设备端调试(需配合调试工具)
二、GPU 状态监控工具(nvidia-smi
)
nvidia-smi
(NVIDIA System Management Interface)用于查看 GPU 硬件状态、内存使用、进程占用等。
常用命令与选项:
nvidia-smi # 实时监控摘要
nvidia-smi --list-gpus # 列出所有 GPU 设备信息
nvidia-smi --memory-usage # 显示内存使用情况
nvidia-smi --pid # 显示占用 GPU 的进程 PID
nvidia-smi -l 5 # 每 5 秒刷新一次监控信息
nvidia-smi -f output.csv # 将结果保存到 CSV 文件
nvidia-smi --query-gpu=utilization.gpu,memory.used,memory.total --format=csv
# 自定义查询指标并输出为 CSV
三、性能分析工具
1. nvprof
(NVIDIA Profiler)
用于分析 CUDA 内核(Kernel)和主机代码的性能,统计执行时间、内存带宽、指令效率等。
nvprof ./your_program # 分析程序并输出摘要
nvprof --print-gpu-trace ./your_program # 打印 GPU 内核执行轨迹
nvprof --metrics all ./your_program # 收集所有可用性能指标
nvprof --events kernel_execution_time ./your_program
# 单独监控内核执行时间
nvprof --csv -o profile.csv ./your_program # 输出为 CSV 格式便于分析
2. nsight-systems
和 nsight-compute
新一代性能分析工具(命令行版本):
nsight-systems -o profile_sys ./your_program # 系统级性能分析(CPU+GPU 交互)
nsight-compute -o profile_comp ./your_program # GPU 内核细粒度分析(寄存器、缓存等)
四、调试工具
1. cuda-gdb
CUDA 专用调试器,用于调试设备端代码(Kernel):
cuda-gdb ./your_program # 启动调试器
(cuda-gdb) run # 运行程序
(cuda-gdb) break kernel_function # 在 Kernel 函数处设置断点
(cuda-gdb) cuda thread 1 0 0 # 切换到指定 GPU 线程(网格/块/线程索引)
2. nvdisasm
反汇编 CUDA 二进制代码(Cubin/PTX):
nvdisasm cubin_file.cubin # 反汇编 Cubin 文件
nvdisasm -ptx ptx_file.ptx # 显示 PTX 代码细节
五、目标文件与库工具
1. cuobjdump
查看 CUDA 目标文件(.o
)或库文件的信息:
cuobjdump -section .text your_object.o # 显示内核的汇编代码
cuobjdump -all your_object.o # 显示所有节(Section)信息
2. fatbinary
处理多架构的 FatBinary 文件:
fatbinary -create arch1.cubin arch2.cubin -o fatbin.cubin # 合并多个 Cubin
fatbinary -extract -arch sm_XX fatbin.cubin -o single.cubin # 提取指定架构的 Cubin
六、其他实用工具
1. nvtx
(NVIDIA Tools Extension)
在代码中插入性能分析标记(需配合 nvprof
或 nsight
):
#include <nvtx3/nvtx.h>
nvtxRangeId_t range = nvtxRangeStartA("MyKernel"); // 标记代码段开始
// 内核调用或计算代码
nvtxRangeEnd(range); // 标记结束
2. cuda-memcheck
检测 GPU 内存错误(如越界访问、未初始化内存):
cuda-memcheck ./your_program # 启用内存检查
总结
- 编译调试:以
nvcc
为核心,配合cuda-gdb
和cuobjdump
。 - 性能分析:
nvprof
用于基础分析,nsight
系列用于深入优化。 - 状态监控:
nvidia-smi
是实时监控 GPU 状态的必备工具。 - 高级工具:
nvtx
用于自定义标记,fatbinary
用于多架构兼容。
更多细节可通过命令的帮助文档查看(如 nvcc --help
、nvidia-smi --help
),或参考 CUDA Toolkit 官方文档。
评论区