NVBench:简化CUDA内核基准测试的强大工具
nvbenchCUDA Kernel Benchmarking Library项目地址:https://gitcode.com/gh_mirrors/nv/nvbench
项目介绍
NVBench 是一个专为简化 CUDA 内核基准测试而设计的 C++17 库。它提供了一套强大的工具,帮助开发者轻松地对 CUDA 内核进行性能测试和优化。无论是参数扫描、运行时定制,还是多种测量类型和输出格式,NVBench 都能满足你的需求。
项目技术分析
核心功能
- 参数扫描:NVBench 提供了一个灵活的“轴”系统,可以探索内核的配置空间。参数可以是动态的数字或字符串,也可以是静态类型。
- 运行时定制:通过丰富的命令行接口,用户可以重新定义参数轴、选择 CUDA 设备、锁定 GPU 时钟、更改输出格式等。
- 吞吐量计算:自动计算并报告元素吞吐量(元素/秒)和全局内存带宽使用情况(字节/秒和设备峰值带宽的百分比)。
- 多种输出格式:支持 Markdown 和 CSV 输出格式。
- 手动计时模式:允许在基准测试实现中显式地开始和停止计时。
- 多种测量类型:包括冷测量和批量测量,分别报告 GPU 和 CPU 时间。
支持的编译器和工具
- CMake > 2.23.1
- CUDA Toolkit + nvcc: 11.1 -> 12.4
- g++: 7 -> 12
- clang++: 9 -> 18
- cl.exe: 2019 -> 2022 (19.29, 29.39)
- 头文件支持 C++17 -> C++20
项目及技术应用场景
NVBench 适用于以下场景:
- CUDA 内核性能优化:通过详细的基准测试数据,帮助开发者优化 CUDA 内核的性能。
- 回归测试:确保在代码变更后,CUDA 内核的性能不会下降。
- 参数调优:通过参数扫描功能,找到最佳的配置参数组合。
- 性能分析:提供多种测量类型和输出格式,帮助开发者深入分析 CUDA 内核的性能瓶颈。
项目特点
- 灵活性:强大的参数扫描和运行时定制功能,满足各种复杂的基准测试需求。
- 易用性:只需几行 CUDA C++ 代码,即可创建一个基本的内核基准测试。
- 多功能性:支持多种测量类型和输出格式,适应不同的分析需求。
- 开源社区支持:欢迎开发者贡献代码,共同完善 NVBench。
快速开始
最小基准测试
只需几行 CUDA C++ 代码,即可创建一个基本的内核基准测试:
void my_benchmark(nvbench::state& state) {
state.exec([](nvbench::launch& launch) {
my_kernel<<<num_blocks, 256, 0, launch.get_stream()>>>();
});
}
NVBENCH_BENCH(my_benchmark);
命令行接口
每个由 NVBench 生成的基准测试可执行文件都提供了一组丰富的命令行选项,用于在运行时配置基准测试执行。
示例
NVBench 提供了多个示例,展示了各种功能和用例,包括:
- 运行时和编译时参数扫描
- 枚举和编译时常量整数参数轴
- 报告元素/秒和字节/秒吞吐量统计
- 跳过基准测试配置
- 在特定流上进行基准测试
- 手动计时
构建示例
mkdir -p build
cd build
cmake -DNVBench_ENABLE_EXAMPLES=ON -DCMAKE_CUDA_ARCHITECTURES=70 .. && make
贡献
欢迎开发者贡献代码!查看 issue board 获取当前问题,特别是标记为 good first issue 的问题,适合首次贡献者。
许可证
NVBench 采用 Apache 2.0 许可证,并附带 LLVM 例外条款。详细信息请参阅 LICENSE。
范围及相关项目
NVBench 专注于测量单个主机端关键区域的 CPU 和 CUDA GPU 执行时间,适用于单个内核的回归测试和参数调优。对于多个应用程序的端到端性能分析,建议使用 NVIDIA Nsight 工具。NVBench 目前不针对 CPU 微基准测试进行优化,未来可能会改变。对于高分辨率的 CPU 基准测试,建议使用 Google Benchmark。
nvbenchCUDA Kernel Benchmarking Library项目地址:https://gitcode.com/gh_mirrors/nv/nvbench