我在使用CUDA nvprof 分析器时遇到了一些问题。网站上的某些指标的命名方式与在探查器中的命名方式不同,并且变量似乎在网站的任何位置都没有解释,或者在网络上的任何地方都没有解释(我无法找到任何有效的参考)
我解码了大部分内容(此处:calculating gst_throughput and gld_throughput with nvprof),但我仍然不确定:
elapsed_cycles
max_warps_per_sm
任何人都知道如何计算这些?
我正在尝试使用 nvprof 通过cmdline评估大约6000个不同的内核,因此使用可视化分析器并不是真的可行。
任何帮助表示赞赏。非常感谢!
编辑: 我正在使用的是什么:
CUDA 5.0,GTX480是cc。 2.0。
我已经做过的事情:
我制作了一个脚本,该脚本从分析器文档站点获取每个度量标准的公式,解析任何给定度量的依赖关系,通过nvprof提取这些度量,然后计算结果。这涉及使用(相当大的)sed脚本,该脚本将站点上出现的所有变量出现更改为具有与分析器实际接受的含义相同的变量。基本上我通过nvprof模拟了grepping指标。我只是遇到了问题:
为什么这些具体变量存在问题:
max_warps_per_sm - 如果它是cc或其他指标/事件的界限,我可能会以某种方式丢失并且特定于我的程序(因为探查器文档中的一些变量有3个(不会出乎意料)! )不同的名字都是为了同一件事。)
elapsed_cycles - 我在nvprof --query-events的输出中没有elapsed_cycles。甚至没有任何包含“elapse”字样的内容,唯一包含“cycle”的内容就是“active_cycles”。可能是吗?有没有其他方法可以计算它?使用“gputime”代替此变量是否有任何损害?我不需要绝对数字,我用它来查找相关性并分析代码,所以如果“gputime”=“elapsed_cycles”*常数,我对此完全没问题。
答案 0 :(得分:2)
您可以使用以下命令列出每台设备上可用的所有事件:
nvprof --query-events
这不是很完整,但是了解这些事件/指标是一个很好的开始。例如,使用CUDA 5.0和CC 3.0 GPU,我们得到:
elapsed_cycles_sm:经过的时钟
elapsed_cycles_sm
是每个多处理器经过的时钟周期数。如果您要为您的计划衡量此指标:
nvprof --events elapsed_cycles_sm ./your_program
max_warps_per_sm
非常简单:这是每个多处理器的驻留warp的最大数量。该值取决于计算能力(参见图表here)。这是一个硬件限制,无论你的内核是什么,在任何给定的时间,每个多处理器永远不会有比这个值更多的常驻warp。
此外,profiler's online documentation中提供了更多信息,包括说明和公式。
根据this answer:
active_cycles:多处理器至少有一个活动warp的周期数。