NVTX
本文介绍NTT算法的演变过程和主流方案以及部分工程优化方法。
1 介绍:
NVTX 是一种基于 C/C++ 的 API,用于标注程序中的代码范围、事件和资源。此标注支持在应用程序运行时收集更多信息,这些信息可用于在分析CUDA代码时改进数据呈现。
2 使用
2.1 引用头文件
#include <nvtx3/nvtx3.hpp>//C++,有可能没有安装上,直接用c的就行。
#include <nvtx3/nvToolsExt.h> //C
2.2 常用功能
2.2.1 范围描述
nvtx3::scoped_range: 用于标记该类所创建对象存在的时间段,传递区间的名字进行初始化。
void some_function() {
nvtx3::scoped_range r{"some_function"};//对象r的存在域是some_function()
for(int i = 0; i < 6; ++i) {
nvtx3::scoped_range loop{"loop range"};//对象loop存在的域是for循环的每个轮次。
std::this_thread::sleep_for(std::chrono::seconds{1});
}
}
nvtxRange:nvtxRang: 通过使用nvtxRangePushA( )和nvtxRangePop( )手动标记。
void my_function(...) {
nvtxRangePushA("my_function"); // 区间开始位置
//
nvtxRangePop(); // 区间结束位置
}
2.2.2 标记事件点
nvtx3::mark:
bool success = do_operation(...);
if (!success) {
nvtx3::mark("operation failed!");
}
2.3 实际使用
插桩后会的影响代码性能,因此应当只在需要的时候对相关代码进行编译。可以宏对代码进行控制。
#ifdef NVTX
//相关命令
#endif
然后再cmake 中添加相应的控制指令
if(NVTX)
add_definitions(-DNVTX)
ENDIF()
在执行编译时添加参数。
cmake -D NVTX=1 ..
make
3 问题
如果没有nvtx3.hpp,可以从NVTX/c/include/nvtx3 at release-v3 · NVIDIA/NVTX (github.com)中下载,添加到 /usr/local/cuda-12.3/include/nvtx3 目录下即可。
4 参考文献
[1]CUDA Pro Tip: Generate Custom Application Profile Timelines with NVTX[EB/OL]//NVIDIA Technical Blog. (2013-09-04)[2024-09-11]. https://developer.nvidia.com/blog/cuda-pro-tip-generate-custom-application-profile-timelines-nvtx/.
[2]NVIDIA/NVTX[CP/OL]. NVIDIA Corporation, 2024[2024-09-11]. https://github.com/NVIDIA/NVTX.
[3]NVTX C++ API Reference: NVTX C++ API Reference[EB/OL]. [2024-09-11]. https://nvidia.github.io/NVTX/doxygen-cpp/index.html.