使用 Nsight 确定银行冲突和合并

Posted

技术标签:

【中文标题】使用 Nsight 确定银行冲突和合并【英文标题】:Using Nsight to determine bank conflicts and coalescing 【发布时间】:2011-07-04 18:13:53 【问题描述】:

我如何知道使用并行 nsight 的非合并读/写和银行冲突的数量? 此外,当我使用 nsight 是分析器时,我应该看什么?哪些重要字段可能会导致我的程序变慢?

【问题讨论】:

【参考方案1】:

我不使用 NSight,但您将使用分析器查看的典型字段基本上是:

内存消耗 花在函数上的时间

更具体地说,使用 CUDA,您会注意 GPU 的占用情况。 其他有趣的值是编译器设置局部变量的方式:在寄存器中或在本地内存中。

最后,您将检查从 GPU 传入和传回数据所花费的时间,并将其与计算时间进行比较。

【讨论】:

【参考方案2】:

银行冲突需要关注warp serialization。见here。

还有here is a discussion关于监控内存合并Global Memory Loads/Stores - Coalesced/Uncoalesced并标记Uncoalesced

【讨论】:

【参考方案3】:

M. Tibbits 基本上回答了你需要知道的关于银行冲突和非合并内存交易的知识。

关于可能导致我的程序变慢的重要字段/要查看的问题(使用 Nsight 分析器时):

    使用应用程序或系统跟踪来确定您是否受 CPU 限制、内存限制或内核限制。这可以通过查看时间轴来完成。

一个。 CPU 受限 - 您将看到没有发生内核或内存复制但您的应用程序线程(线程状态)为绿色的大面积区域

b.内存绑定——内核执行在内存传输到设备或从设备传输时被阻塞。您可以通过查看 Memory Row 看到这一点。如果您在内存副本上花费大量时间,那么您应该考虑使用 CUDA 流来流水线化您的应用程序。这可以让您重叠内存传输和内核。在更改代码之前,您应该比较传输和内核的持续时间,并确保您将获得性能提升。

c。 Kernel bound – 如果应用程序的大部分时间都花在等待内核完成,那么你应该切换到“Profile”活动,重新运行你的应用程序,并开始收集硬件计数器,看看如何让你的内核的实际执行时间快点。

【讨论】:

以上是关于使用 Nsight 确定银行冲突和合并的主要内容,如果未能解决你的问题,请参考以下文章

如何减少此代码中的银行冲突?

合并与银行冲突(Cuda)

将数据从全局加载到共享内存时如何避免银行冲突

CUDA - 确定共享内存中的银行数量

随机内存访问和银行冲突

AMD 硬件上的银行冲突和通道冲突有啥区别?