计算器和 nvprof 之间的占用不同

Posted

技术标签:

【中文标题】计算器和 nvprof 之间的占用不同【英文标题】:different occupancy between calculator and nvprof 【发布时间】:2014-05-05 09:32:37 【问题描述】:

我正在使用 nvprof 来衡量实现的入住率,我发现它是

实现入住率 0.344031 0.344031 0.344031

但使用占用率计算器,我发现 75%。

结果是:

Active Threads per Multiprocessor   1536
Active Warps per Multiprocessor 48
Active Thread Blocks per Multiprocessor 6
Occupancy of each Multiprocessor    75%

我正在使用 33 个寄存器,144 字节共享内存,256 个线程/块,设备能力 3.5。

编辑:

另外,我想澄清一下。在http://docs.nvidia.com/cuda/profiler-users-guide/#axzz30pb9tBTN 中,它声明了

gld_efficiency

请求的全局内存负载吞吐量与所需全局的比率 以百分比表示的内存负载吞吐量

那么,如果这是 0% 是否意味着我在内核中没有全局内存传输?

【问题讨论】:

能否请您显示您用于获取“Achieved Occupancy”的命令行? 【参考方案1】:

您需要了解占用率计算器仅根据该内核的资源需求提供给定内核可以实现的最大理论占用率。它没有(也不能)说明代码能够实现多少理论上的占用率。

另一方面,分析工具从测量的配置文件计数器中推断出实际入住率。根据this文档,您所询问的实际入住人数计算为

(active_warps / active_cycles) / MAX_WARPS_PER_SM

即。它在内核运行期间对一个或多个 SM 上的活动扭曲数进行采样,并从中计算实际占用率

内核没有达到其理论占用率可能有很多原因,而且(在您问之前),不,我不能告诉您为什么您的内核没有达到理论占用率。但是 Visual Profiler 可以。如果它对您很重要,我建议您查看 CUDA 5/6 可视化分析器中提供的自动性能分析功能,以更好地了解代码的性能。

还值得指出的是,占用率应仅视为潜在代码性能的粗略指标,高理论占用率并不总能转化为高性能。即使在低占用率的情况下,指令级并行和延迟最小化策略也可以非常有效地达到高性能水平。在这方面有大量的工作,大部分来自 Vasily Volkov 的开创性GTC 2010 paper。

【讨论】:

:好的,谢谢。所以,从 nvprof 创建的已获得入住率是我应该看到的。我想到了沃尔科夫的论文,谢谢。只是,我也想检查入住率,不要太低。最后,对于我要问的gld_efficiency,我说的是什么?还是相反? :你好,我刚刚运行了 nsight profiler,我发现在每个内核中,它的寄存器数量与 ptxas 选项=-v 给我的不同。所以,我将寄存器数量作为寄存器数量来自 nsight profiler?另外,对于 gld_efficiency ,如果它是 0% 意味着我在内核中没有全局内存传输?谢谢!

以上是关于计算器和 nvprof 之间的占用不同的主要内容,如果未能解决你的问题,请参考以下文章

如何让 malloc 出现在 nvprof 的统计分析器中?

计算机系统篇之链接(10):.bss.data 和 .rodata section 之间的区别

sql查询计算不同列和相邻行的两个日期之间的差异

多进程

如何查找和计算两个不同数据帧之间的重复行数? [关闭]

linux云计算和大数据有啥不同那?之间有联系吗?