具有计算能力 2.x 的 GPU 将其片上内存组织成 32 个存储体。片上存储器可用于 2 种配置:48 KB 共享和 16 KB L1,反之亦然。对于 48 KB 共享和 16 KB L1 配置,其中存储有 L1 高速缓存的存储体。据我了解共享内存存储,当写入它时,连续的 32 位字存储在连续的银行中。这让我想到,对于 48 KB 共享和 16 KB L1 配置,每个内存库将存储 384 个 32 位字用于共享内存和 128 个 32 位字用于 L1 高速缓存。这个对吗?
问问题
488 次
1 回答
1
如果我理解你的正确性:你问的是,例如 bank0 是否持有相对于 0 移动 32、64 等 4 字节字(即 128 字节)的地址,因此 egp[0]
和p[32]
( int* p
) 对应于同一个银行,对吗?
我相信,编程指南(5.0)的 F.4.3(共享内存)部分暗示了这种组织,特别是“32-Strided Access”部分。
本演示文稿的第 84 页还提供了该组织的一些可视化。简而言之:对于 SMEM,您是正确的。
L1 的访问模式为 128Byte 宽,因此它在您的配置中拥有 128 128Byte 宽的行(并且第N
行的地址之间没有关系(N+1)
)。您可能会将单个 128Byte 行解释为为 32 个 bank 中的每一个提供 4Bytes,那么您在这部分也是正确的。
于 2012-09-10T14:54:04.183 回答