我正在尝试了解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 Efficiency
和Multiprocessor Activity
如何变得如此之低?这些是在分析内核的一般性能时要考虑的正确指标,对吧?
答案 0 :(得分:3)
这里的一个好答案可能涉及一个关于CUDA执行效率,优化方法和目标的冗长教程,以及nvprof
的机制。由于您根本没有提供任何代码,因此它必须完全是抽象的和推测性的。
如果您正在努力应对nvprof
或CUDA优化概念,可以通过尝试nvvp
(视觉分析器)来提供更好的服务,其中包括大量的指导分析,解释和帮助和专家系统。
要开始探索您的一个问题,sm_efficiency
是指SM有一个或多个有效的经线的时间百分比。由于您的sm_efficiency
非常低,因此看起来很多时候SM(s)处于空闲状态 - 它不会发出指令。例如,如果我们将其与占用率进行比较,则这些几乎是正交概念。占用率大致指的是SM上驻留的经线数量。如果SM有一个"完整补全"经线,然后占用率会很高。
关于这些问题是否是适当的指标","正确的指标"应遵循以下两条轨迹之一:
验证是否已达到基本优化目标。对于CUDA,其中最基本的涉及具有足够的并行性暴露和有效使用存储器子系统。例如,您所选择的指标都与高效的内存使用无关。
分析驱动的优化轨迹,即专注于建立性能限制的轨迹。有各种演示文稿涵盖了您可以搜索的这些想法。如果您在" gtc cuda优化"上进行谷歌搜索你会发现那些能够很好地揭示基本CUDA优化技术,性能测量和分析驱动优化的演示文稿。
将此标记为CW - 其他人可能希望添加他们的想法或最佳做法。