我有一个CUDA程序,其中块的线程在几次迭代和内存访问中读取长数组的元素几乎完全合并。当我分析时,全局负载效率超过100%(在119%和187%之间,具体取决于输入)。 全局负载效率的描述是“全局内存负载吞吐量与所需全局内存负载吞吐量的比率。”这是否意味着我正在大量使用L2缓存和我的内存访问受益于它?
我的GPU是GeForce GTX 780(开普勒架构)。
答案 0 :(得分:3)
我在NVIDIA论坛上here提出了这个问题。我引用了我得到的答案:
“全局负载效率和全局存储效率描述了DRAM访问和(L2?)缓存访问的合并效果如何。如果它们是百分之百,那么您就可以实现完美的合并。 100%没有任何意义(你不能比最佳更好)这必须是一个错误。 此错误是由Visual Profiler引起的,它会计算硬件事件以计算一些抽象度量标准。但GPU没有“正确”的事件来准确计算所有这些指标,因此Visual Profiler必须通过使用一些复杂的公式和“错误”事件来估计这些指标。有一些指标只是粗略估计,全球负载效率和全球存储效率是其中两个。因此,如果这样的效率大于100%,则是估计误差。据我所知,全局负载效率和全局存储效率在我的一些寄存器溢出内核中都增加了100%以上。这就是为什么我假设Visual-Profiler使用一些事件(也可能是由本地内存访问引起)来计算这两种效率。此外,GPU仅使用32位计数器。因此,长时间运行的内核往往会溢出这些计数器,这也会导致Visual Profiler显示错误的指标。“