合并与银行冲突(Cuda)

时间:2010-08-19 05:20:13

标签: cuda bank-conflict

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

3 个答案:

答案 0 :(得分:5)

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

不同的计算能力设备在这里有不同的行为,但是1.2 GPU仍然需要注意确保你正在合并读写 - 只是有一些优化可以使你的内容更容易

您应该阅读CUDA Best Practices指南。这有关这两个问题的详细信息。

答案 1 :(得分:2)

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

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

SDK中的扫描减少示例也可以很好地解释共享内存库冲突,以及对内核的逐步改进。

答案 2 :(得分:1)

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

但是,为了获得最佳性能,您仍需要确保这些合并机会可用。如果warp中的所有线程都将内存事务处理为完全不同的内存原子,那么聚结器就无法做任何事情,因此了解内核的内存位置行为仍然是值得的。