【问题标题】:L1 Cache Storage on GPUGPU 上的 L1 缓存存储
【发布时间】:2012-07-02 09:37:40
【问题描述】:
具有 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 高速缓存。这是正确的吗?
【问题讨论】:
标签:
cuda
gpu
shared-memory
cpu-cache
【解决方案1】:
如果我理解你的正确:你在问是否例如bank0 保存相对于 0 移动 32、64 等 4 字节字(即 128Bytes)的地址,例如p[0] 和 p[32] (int* p) 对应同一个银行,对吗?
我相信,编程指南 (5.0) 的 F.4.3(共享内存)部分暗示了这种组织,特别是“32-Strided Access”部分。
this presentation 的第 84 页还提供了该组织的一些可视化。简而言之:对于 SMEM,您是正确的。
L1 的访问模式为 128 字节宽,因此它在您的配置中包含 128 条 128 字节宽的行(Nth 和 (N+1)th 行的地址之间没有关系)。您可能会将单个 128Byte 行解释为为 32 个 bank 中的每一个提供 4Bytes,那么您在这部分也是正确的。