使用 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 确定银行冲突和合并的主要内容,如果未能解决你的问题,请参考以下文章