Nsight 分析器显示的“其他”问题停顿原因是啥?

Posted

技术标签:

【中文标题】Nsight 分析器显示的“其他”问题停顿原因是啥?【英文标题】:What are "Other" Issue Stall Reasons displayed by the Nsight profiler?Nsight 分析器显示的“其他”问题停顿原因是什么? 【发布时间】:2013-02-15 03:22:33 【问题描述】:

我的内核在 CC 3.0 (Kepler) 上的性能比在 CC 2.0 (Fermi) 上的性能差。在 Nsight 分析器中,Warp Issue Efficiency 图表显示 60% 的时间没有符合条件的扭曲,Issue Stall Reasons 图表显示其中 60% 是由于“其他”。

我想知道其他问题停滞的原因是什么以及我可以做些什么来减少它们。

CUDA 5.0。 /Nsight 3.0。 RC / CC 3.0。

【问题讨论】:

感谢您提供的信息。内核是一个 PBKDF2-HMAC-SHA1 密钥扩展器。因此,它运行了大量的整数加法和按位运算。特别是,有很多 32 位整数移位,这在 Kepler 上的吞吐量很低。没有 FP 操作。我猜,在这种情况下,Other 是由于低吞吐量整数操作,所以没有什么可做的。 【参考方案1】:

在 Nsight Visual Studio 版本 3.0 CUDA Profiler 中,问题效率显示了扭曲停止原因的饼图。停顿的原因是指令获取、执行依赖、数据请求、纹理、同步等。

对于 Compute Capability 3.* 设备,Other 类别是由于以下原因导致活动扭曲停止的时间百分比:

执行单元正忙(减少使用低吞吐量整数运算) 寄存器库冲突(编译器问题有时会因大量使用矢量数据类型而变得更糟) 每个调度程序的扭曲太少

对于 Compute Capability 5.* 和 6.* 设备,Other 类别是由于以下原因导致活动扭曲停止的时间百分比:

寄存器库冲突(编译器问题有时会因大量使用矢量数据类型而变得更糟) warp 等待解析分支 优先级较低且当前未考虑调度的warp

对于 5.* 和 6.*,尤其是 gp100,如果内核达到每个 warp 调度程序 32 个 warp,最后一个原因可能非常高 (~75%)。

这些停顿原因归入另一类,因为很难确定开发人员可以采取哪些措施来解决这些问题。

【讨论】:

...第三个原因对我来说似乎很可行:“增加块尺寸”。我错了吗? 工作流首先看问题效率。如果在 60% 的周期中没有符合条件的扭曲,那么增加占用率通常是首先要调查的事情之一。调度程序停止的原因可以更深入地了解执行问题。增加入住率并不一定意味着增加街区尺寸。通常,每块较小的经纱是增加每个 SM 经纱的更好方法。 (1) 你能否举一个你最后一句话的具体例子,其中“每个调度程序的 warp 太少”是失速原因的主要因素(~50% 或更多)?如果是这样,我会提出另一个问题,您可以回答。 (2) 这三个原因是否详尽无遗? 该列表并不详尽。我已经稍微更新了 Maxwell (5.*) 和 Pascal (6.*) 的答案,因为 Maxwell/Pascal 架构与之前的 Fermi 和 Kepler 架构有很大不同,并且失速的原因也大不相同。仅当未发出指令的周期百分比很高 (>20%) 时,才应查看停顿原因。

以上是关于Nsight 分析器显示的“其他”问题停顿原因是啥?的主要内容,如果未能解决你的问题,请参考以下文章

在 Nsight Eclipse 7.5 中进行分析以使用 NVTX 时,正确的 CUDA 项目配置是啥?

如何修复 Nsight 分析器中的“低内核并发”警告?

网络异常下载失败是啥原因

Nsight + Visual Studio 上缺少“开始性能分析”按钮

NSight Profiler 信号 139

Glut 和 cuda 每秒停顿 100 毫秒