我有一个CUDA程序,它有多个内核在系列上运行(在同一个流中-默认流(。我想对整个程序,特别是GPU部分进行性能分析。我正在使用nvprof工具使用一些指标进行分析,如已实现占用率、inst_per_warp、gld_efficiency等。
但是探查器分别为每个内核提供度量值,而我想为它们计算这些值,以查看程序的GPU总使用量。我应该为每个度量取所有内核的(平均值、最大值或总和(吗??
一种可能的方法是使用加权平均法。
假设我们的时间线中有3个不重叠的内核。假设内核1运行10毫秒,内核2运行20毫秒,内核3运行30毫秒。总的来说,所有3个内核都占用了我们整个应用程序时间线中的60毫秒。
我们还假设探查器报告gld_efficiency度量如下:
kernel duration gld_efficiency
1 10ms 88%
2 20ms 76%
3 30ms 50%
您可以计算加权平均值如下:
88*10 76*20 50*30
"overall" global load efficiency = ----- + ----- + ----- = 65%
60 60 60
我相信可能还有其他方法也是有意义的。例如,一个更好的方法可能是让探查器报告每个内核的全局加载事务的总数,并根据它而不是内核持续时间进行加权:
kernel gld_transactions gld_efficiency
1 1000 88%
2 2000 76%
3 3000 50%
88*1000 76*2000 50*3000
"overall" global load efficiency = ------- + ------- + ------- = 65%
6000 6000 6000