使用 nvproof 分析 CUDA 程序。
我已经在如何每次调用内核函数时收集事件值中描述了这个问题?
我再次发布问题。
有了nvprof --events tex0_cache_sector_queries --replay-mode kernel ./matrixMul
,
或nvprof --events tex0_cache_sector_queries --replay-mode application ./matrixMul
,
我们可以收集事件值结果:
==40013== Profiling application: ./matrixMul
==40013== Profiling result:
==40013== Event result:
"Device","Kernel","Invocations","Event Name","Min","Max","Avg","Total"
"Tesla K80 (0)","void matrixMulCUDA<int=32>(float*, float*, float*, int, int)",301,"tex0_cache_sector_queries",0,30,24,7224
以上结果是摘要。内核函数matrixMulCUDA调用的tex0_cache_sector_queries的301次调用值。它只有 301 次调用的最小值、最大值、平均值、总值,这是一个汇总结果。
我想收集完整的 301 次tex0_cache_sector_queries值,这些值来自每次调用矩阵 MulCUDA 时。另一方面,每次调用内核函数矩阵 MulCUDA 时,我都想收集tex0_cache_sector_queries事件值。如何收集?
1 运行:
nvprof --pc-sampling-period 31 --print-gpu-trace --replay-mode application
--export-profile application.prof --events tex0_cache_sector_queries ./matrixMul
2 将application.prof导入 visual profiler:
可视探查器结果
3 按照图片上的索引获取每个内核函数的每次调用事件值。
4--print-gpu-trace
参数:打印单个内核调用(包括 CUDA memcpy/memset(并按时间顺序对它们进行排序。在事件/指标分析模式下,显示每个内核调用的事件/指标可以解决此问题。打印-GPU 跟踪