用nvprof计算gst_throughput和gld_throughput

时间:2013-03-22 23:09:04

标签: cuda profiler

我遇到了以下问题。我想使用gst_efficiency衡量我的cuda应用程序的gld_efficiencynvprof。与cuda 5.0一起分发的文档告诉我使用以下公式为具有计算能力2.0-3.0的设备生成这些文件:

gld_efficiency = 100 * gld_requested_throughput / gld_throughput

gst_efficiency = 100 * gst_requested_throughput / gst_throughput

对于所需的指标,给出了以下公式:

gld_throughput = ((128 * global_load_hit) + (l2_subp0_read_requests + l2_subp1_read_requests) * 32 - (l1_local_ld_miss * 128)) / gputime

gst_throughput = (l2_subp0_write_requests + l2_subp1_write_requests) * 32 - (l1_local_ld_miss * 128)) / gputime

gld_requested_throughput = (gld_inst_8bit + 2 * gld_inst_16bit + 4 * gld_inst_32bit + 8
* gld_inst_64bit + 16 * gld_inst_128bit) / gputime

gst_requested_throughput = (gst_inst_8bit + 2 * gst_inst_16bit + 4 * gst_inst_32bit + 8
* gst_inst_64bit + 16 * gst_inst_128bit) / gputime

由于没有给出所用指标的公式,我认为这些是可以由nvprof计算的事件。但有些事件似乎不适用于我的gtx 460(也尝试过gtx 560 Ti)。我粘贴了nvprof --query-events的{​​{3}}。

任何想法出了什么问题或者我误解了什么?

修改 我不想使用CUDA Visual Profiler,因为我正在尝试分析我的应用程序的不同参数。因此,我希望使用多个参数配置运行nvprof,记录多个事件(每个事件在一次运行中),然后在表中输出数据。我已经实现了这种自动化并且正在为其他指标(即发布的指令)工作,并希望为加载和存储效率做到这一点。这就是为什么我对涉及nvvp的解决方案不感兴趣。顺便说一下,对于我的应用程序nvvp无法计算商店效率所需的指标,因此在这种情况下它根本无法帮助我。

1 个答案:

答案 0 :(得分:1)

我很高兴有人遇到同样的问题:)我试图做同样的事情并且无法使用Visual Profiler,因为我想分析6000个不同的内核。

NVidia网站上的公式记录很少 - 实际上变量可以是:

a)事件

b)其他指标

c)依赖于你拥有的GPU的不同变量

然而,很多指标都存在错字或者在nvprof中有点不同于在网站上。此外,变量没有标记,因此您无法通过查看它们是a),b)还是c)来判断。我用一个脚本来grep它们然后不得不手工修复它。这是我发现的:

1)“l1_local / global_ld / st_hit / miss” 它们在nvprof中“加载”/“存储”而不是在网站上“ld”/“st”。

2)“l2_ ......无论...... _requests” 它们在nvprof中有“sector_queries”而不是“requests”。

3)“local_load / store_hit / miss” 这些在探查器中还有“l1_” - “l1_local / global_load / store_hit / miss”

4)“tex0_cache_misses” 这个在探查器中有“扇区” - “tex0_cache_sector_misses”

5)“tex_cache_sector_queries” 缺少“0” - 所以nvprof中的“tex0_cache_sector_queries”。

最后,变量:

1)“#SM” 流式多处理器的数量。通过cudaDeviceProp获取。

2)“gputime” 显然,GPU上的执行时间。

3)“warp_size” GPU上的warp大小,再次通过cudaDeviceProp获得。

4)“max_warps_per_sm” 每个块上sm * #SM * warp上可执行的块数。我想。

5)“elapsed_cycles” 发现这个: https://devtalk.nvidia.com/default/topic/518827/computeprof-34-active-cycles-34-counter-34-active-cycles-34-value-doesn-39-t-make-sense-to-/ 但是如果我明白的话,还是不完全确定。

希望这可以帮助您和其他遇到同样问题的人:)