使用 cuda 编程时,合并和银行冲突有什么区别?
是否只是在全局内存中发生合并,而在共享内存中发生银行冲突?
如果我的 GPU 支持 >1.2,我应该担心合并吗?它自己处理合并吗?
问问题
2585 次
3 回答
5
是的,合并读取/写入适用于全局读取,而银行冲突适用于共享内存读取/写入。
不同的计算能力设备在这里有不同的行为,但是 1.2 GPU 仍然需要小心以确保您合并读取和写入 - 只是有一些优化可以让您更轻松
您应该阅读CUDA 最佳实践指南。这涉及到这两个问题的很多细节。
于 2010-08-19T07:48:03.110 回答
2
是:合并访问仅与全局内存相关,银行冲突仅与共享内存相关。
另请查看 Advanced CUDA C 培训课程,第一部分详细介绍了 >1.2 GPU 中的硬件如何帮助您以及您仍需要考虑哪些优化。它也解释了共享内存库冲突。例如,查看此记录。
SDK 中的扫描和缩减示例还通过对内核的逐步改进很好地解释了共享内存库冲突。
于 2010-08-20T15:09:27.350 回答
1
大于 1.2 的 GPU 将尽其所能进行合并,因为它能够将相同大小的内存访问分组到 256 字节的相同内存原子内,并将它们作为 1 次内存写入写出。GPU 将负责重新排序访问并将它们与正确的内存边界对齐。(在早期的 GPU 中,warp 中的内存事务必须与内存原子对齐,并且必须以正确的顺序排列。)
但是,为了获得最佳性能,您仍然需要确保这些合并机会可用。如果一个 warp 中的所有线程都具有与完全不同的内存原子的内存事务,则合并器无能为力,因此仍然需要注意内核的内存局部性行为。
于 2010-12-13T06:03:29.693 回答