Cuda 试图了解nvprof指标、sm_效率和warp_执行_效率为零
我正在努力理解nvprof指标。我是CUDA的新手,因此试图了解哪些指标对性能很重要 我写了一个内核来计算矩阵之间的绝对差之和 在Tegra X1上运行时,它的平均速度约为47ms,有1584个块,每个块有1024个线程 运行nvprof我可以获得以下指标: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
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%。我建议再次收集度量。请发布结果和内核。