使用nvprof分析CUDA程序。
我已在How to collect the event value every time the kernel function been invocated?中描述了问题
我再次发布问题。
使用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次调用的 min,max,avg,total 值,即汇总结果。
我想收集每次调用matrixMulCUDA以来的完整301次tex0_cache_sector_queries值。另一方面,每次调用内核函数matrixMulCUDA时,我都希望收集tex0_cache_sector_queries事件值。如何收集?
答案 0 :(得分:1)
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 导入可视分析器:
3按照图片上的索引获取每个内核函数的事件值的每次调用。
4 --print-gpu-trace
参数:打印单个内核调用(包括CUDA memcpy / memset),并按时间顺序对其进行排序。在事件/指标分析模式下,每次内核调用的show event / metrics都可以解决此问题。 print-gpu-trace