【问题标题】:Coalescence vs Bank conflicts (Cuda)合并与银行冲突(Cuda)
【发布时间】:2011-03-31 22:35:15
【问题描述】:

使用 cuda 编程时,合并和银行冲突有什么区别?
是否只有在全局内存中发生合并,而在共享内存中发生银行冲突?
如果我有 >1.2 支持的 GPU,我应该担心合并吗?它自己处理合并吗?

【问题讨论】:

    标签: cuda bank-conflict


    【解决方案1】:

    是的,合并读取/写入适用于全局读取,而银行冲突适​​用于共享内存读取/写入。

    不同的计算能力设备在这里有不同的行为,但 1.2 GPU 仍然需要小心以确保您合并读取和写入 - 只是有一些优化可以让您更轻松

    您应该阅读CUDA Best Practices 指南。这涉及到这两个问题的很多细节。

    【讨论】:

      【解决方案2】:

      是:合并访问仅与全局内存相关,银行冲突仅与共享内存相关。

      还请查看高级 CUDA C 培训课程,第一部分详细介绍了 >1.2 GPU 中的硬件如何为您提供帮助以及您仍需要考虑哪些优化。它也解释了共享内存库冲突。以this recording 为例。

      SDK 中的 scanreduction 示例还很好地解释了共享内存库的冲突,以及对内核的逐步改进。

      【讨论】:

        【解决方案3】:

        >1.2 GPU 将尽其所能进行合并,因为它能够将相同大小的内存访问分组到相同的 256 字节内存原子中,并将它们作为 1 次内存写入写出。 GPU 将负责重新排序访问并将它们与正确的内存边界对齐。 (在早期的 GPU 中,warp 中的内存事务必须与内存原子对齐,并且必须按照正确的顺序。)

        但是,为了获得最佳性能,您仍然需要确保这些合并机会可用。如果一个 warp 中的所有线程都对完全不同的内存原子进行内存事务,则合并器无能为力,因此仍然需要注意内核的内存局部性行为。

        【讨论】:

          猜你喜欢
          • 2011-09-01
          • 2015-04-07
          • 2013-02-07
          • 2011-01-18
          • 1970-01-01
          • 2014-03-15
          • 2011-04-20
          • 2016-09-07
          • 2015-09-23
          相关资源
          最近更新 更多