我对银行冲突有点困惑,避免使用内存填充和合并内存访问。到目前为止我读过的内容:从全局内存中合并内存访问是最佳的。如果无法实现,则可以使用共享内存对当前块所需的数据进行重新排序,从而使合并访问成为可能。但是,当使用共享内存时,必须注意银行冲突。避免存储库冲突的一种策略是将存储在共享内存中的数组填充 1。考虑此博客文章中的示例,其中 16x16 矩阵的每一行都填充 1,使其成为共享内存中的 16x17 矩阵。
现在我明白了使用内存填充可能会避免银行冲突,但这是否也意味着内存不再对齐?例如,如果我将全局内存移动 1 从而使其未对齐,则一个扭曲将需要访问两个内存通道而不是一个,因为最后一个数字与所有其他数字不在同一通道中。因此,据我了解,合并的内存访问和内存填充是相互矛盾的概念,不是吗?一些澄清非常感谢!