聚合与银行冲突 (Cuda)

3

在使用cuda进行编程时,协同和Bank冲突有什么区别?
仅仅是因为协同发生在全局内存而Bank冲突发生在共享内存吗?
如果我有一块支持>1.2的GPU,我需要担心协同吗?它会自己处理协同吗?

3个回答

5

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

不同的计算能力设备在这里有不同的行为,但是1.2 GPU仍然需要注意确保您正在合并读取和写入 - 只是有一些优化使事情更容易。

您应该阅读CUDA最佳实践指南。这涵盖了这两个问题的许多细节。


2
是的:合并访问只涉及全局内存,银行冲突只涉及共享内存。同时,还可以查看高级 CUDA C 培训课程,其中第一部分详细解释了 >1.2 GPU 中的硬件如何帮助您以及仍需考虑的优化。它还解释了共享内存银行冲突。例如,可以查看 this recording。SDK 中的扫描和约简示例也很好地解释了共享内存银行冲突,并对内核进行了逐步改进。

1

A >1.2 GPU会尽其所能地针对强制操作(coalescing)进行最佳优化,即将相同大小的内存访问分组,使其适合256字节的同一内存原子,并将它们作为1次内存写入写出。GPU将负责重新排序访问并将其对齐到正确的内存边界。(在早期的GPU中,warp内的内存事务必须对齐到内存原子并按正确的顺序排列。)

然而,为了实现最佳性能,仍需要确保具有这些强制操作机会。如果warp内的所有线程都有完全不同的内存事务,则强制器无法执行任何操作,因此,仍需注意内核的内存本地性行为。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接