试图了解nvprof指标,sm_efficiency和warp_execution_efficiency为零

时间:2016-10-18 23:50:21

标签: cuda

我正在尝试了解nvprof指标。我是CUDA的新手,因此试图了解哪些指标对性能很重要。

我编写了一个用于计算矩阵之间绝对差值之和的内核。

在Tegra X1上运行,平均大约47ms,每块1584个块和1024个线程。

运行nvprof我得到这些指标:

achieved_occupancy         Achieved Occupancy         0.982284    0.982284    0.982284
warp_execution_efficiency  Warp Execution Efficiency  0.00%       0.00%       0.00%
sm_efficiency              Multiprocessor Activity    0.11%       0.11%       0.11%
branch_efficiency          Branch Efficiency          100.00%     100.00%     100.00%
ipc                        Executed IPC               3.600738    3.600738    3.600738

当其他指标如此之好时,Warp Execution EfficiencyMultiprocessor Activity如何变得如此之低?这些是在分析内核的一般性能时要考虑的正确指标,对吧?

1 个答案:

答案 0 :(得分:3)

这里的一个好答案可能涉及一个关于CUDA执行效率,优化方法和目标的冗长教程,以及nvprof的机制。由于您根本没有提供任何代码,因此它必须完全是抽象的和推测性的。

如果您正在努力应对nvprof或CUDA优化概念,可以通过尝试nvvp(视觉分析器)来提供更好的服务,其中包括大量的指导分析,解释和帮助和专家系统。

要开始探索您的一个问题,sm_efficiency是指SM有一个或多个有效的经线的时间百分比。由于您的sm_efficiency非常低,因此看起来很多时候SM(s)处于空闲状态 - 它不会发出指令。例如,如果我们将其与占用率进行比较,则这些几乎是正交概念。占用率大致指的是SM上驻留的经线数量。如果SM有一个"完整补全"经线,然后占用率会很高。

关于这些问题是否是适当的指标","正确的指标"应遵循以下两条轨迹之一:

  1. 验证是否已达到基本优化目标。对于CUDA,其中最基本的涉及具有足够的并行性暴露和有效使用存储器子系统。例如,您所选择的指标都与高效的内存使用无关。

  2. 分析驱动的优化轨迹,即专注于建立性能限制的轨迹。有各种演示文稿涵盖了您可以搜索的这些想法。如果您在" gtc cuda优化"上进行谷歌搜索你会发现那些能够很好地揭示基本CUDA优化技术,性能测量和分析驱动优化的演示文稿。

  3. 将此标记为CW - 其他人可能希望添加他们的想法或最佳做法。