几年前,NVIDIA 的 Mark Harris 发布了这个:
他在其中描述了如何使用共享内存而不是简单的方法更快地执行矩阵转置。出于方法论的目的,他还实现了基于共享内存块的简单矩阵副本版本。
有点令人惊讶的是,通过共享内存块进行复制的速度比“原始”复制(使用 2D 网格)要快:原始复制为 136 GB/秒,基于共享内存块的复制为 152.3 GB/秒。那是在 Kepler 微架构卡 Tesla K20c 上。
我的问题:为什么这有意义?也就是说,当所有所做的都是合并读取和写入时,为什么有效带宽没有降低?具体来说,它是否与 __restrict
未使用(因此__ldg()
可能未使用)的事实有关?
注意:这个问题不是关于换位的。这篇文章是关于换位的,它的教训很好。它没有讨论涉及简单、非转置复制的奇怪现象。