Cuda 试图了解nvprof指标、sm_效率和warp_执行_效率为零

Cuda 试图了解nvprof指标、sm_效率和warp_执行_效率为零,cuda,Cuda,我正在努力理解nvprof指标。我是CUDA的新手,因此试图了解哪些指标对性能很重要 我写了一个内核来计算矩阵之间的绝对差之和 在Tegra X1上运行时,它的平均速度约为47ms,有1584个块,每个块有1024个线程 运行nvprof我可以获得以下指标: achieved_occupancy Achieved Occupancy 0.982284 0.982284 0.982284 warp_execution_efficiency Warp E

我正在努力理解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执行效率
多处理器活动
如此之低,而其他指标却如此之好?在分析内核的总体性能时,这些是正确的衡量标准,对吗?

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

如果您正在努力解决
nvprof
或CUDA优化概念,您最好尝试使用
nvvp
,这是一种可视化的探查器,其中包括许多有指导的分析、解释、帮助和专家系统

要开始探究您的一个问题,
sm_效率
指sm有一个或多个活动扭曲的时间百分比。由于您的
sm_效率相当低,因此大部分时间sm作为一个整体处于空闲状态-它没有发出指令。例如,如果我们将其与占用率进行比较,这些概念几乎是正交的。占用率粗略地说是指SM上驻留了多少翘曲。如果SM有“完整的”翘曲,则占用率将很高

关于您关于这些是否为“适当指标”的问题,“适当指标”应遵循以下两条轨迹之一:

  • 验证是否已达到基本优化目标。对于CUDA来说,最基本的问题是要有足够的并行性和内存子系统的有效使用。例如,您选择的指标中没有一个与有效内存使用率相关

  • 分析驱动的优化轨迹,即专注于建立性能限制的轨迹。有各种各样的介绍,涵盖这些想法,你可以搜索。如果您在“gtc cuda优化”上进行谷歌搜索,您将发现演示文稿在展示基本cuda优化技术、性能度量和分析驱动优化方面做得很好


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

    我认为扭曲执行效率和sm效率不正确。入住率接近100%(这与您是否能适应2048=64个整经/SM的预期相符。我不记得ipc是每SM还是每GPU。让我们假设它是每GPU。Maxwell SM的可持续ipc为6.0*2 SMs=12。最低SM_效率必须为3.6/12=30%。我建议再次收集度量。请发布结果和内核。