合并与银行冲突(Cuda)
Posted
技术标签:
【中文标题】合并与银行冲突(Cuda)【英文标题】:Coalescence vs Bank conflicts (Cuda) 【发布时间】:2011-03-31 22:35:15 【问题描述】:使用 cuda 编程时,合并和银行冲突有什么区别? 是否只有在全局内存中发生合并,而在共享内存中发生银行冲突? 如果我有 >1.2 支持的 GPU,我应该担心合并吗?它自己处理合并吗?
【问题讨论】:
【参考方案1】:是的,合并读取/写入适用于全局读取,而银行冲突适用于共享内存读取/写入。
不同的计算能力设备在这里有不同的行为,但 1.2 GPU 仍然需要小心以确保您合并读取和写入 - 只是有一些优化可以让您更轻松
您应该阅读CUDA Best Practices 指南。这涉及到这两个问题的很多细节。
【讨论】:
【参考方案2】:是:合并访问仅与全局内存相关,银行冲突仅与共享内存相关。
还请查看高级 CUDA C 培训课程,第一部分详细介绍了 >1.2 GPU 中的硬件如何为您提供帮助以及您仍需要考虑哪些优化。它也解释了共享内存库冲突。以this recording 为例。
SDK 中的 scan 和 reduction 示例还很好地解释了共享内存库的冲突,以及对内核的逐步改进。
【讨论】:
【参考方案3】:>1.2 GPU 将尽其所能进行合并,因为它能够将相同大小的内存访问分组到相同的 256 字节内存原子中,并将它们作为 1 次内存写入写出。 GPU 将负责重新排序访问并将它们与正确的内存边界对齐。 (在早期的 GPU 中,warp 中的内存事务必须与内存原子对齐,并且必须按照正确的顺序。)
但是,为了获得最佳性能,您仍然需要确保这些合并机会可用。如果一个 warp 中的所有线程都对完全不同的内存原子进行内存事务,则合并器无能为力,因此仍然需要注意内核的内存局部性行为。
【讨论】:
以上是关于合并与银行冲突(Cuda)的主要内容,如果未能解决你的问题,请参考以下文章