首页 > 解决方案 > L2 事务如何映射到 GPU 中的 DRAM?

问题描述

在 GPU 中,L2 缓存的事务大小可以是 32B、64B 或 128B(读取和写入)。此类事务的总数可以使用 gst_transactions 和 gld_transactions 等 nvprof 指标来衡量。但是,我找不到任何详细说明这些事务如何映射以进行 DRAM 访问的材料,即这些事务如何由通常具有不同总线宽度的 DRAM 处理?例如,TitanXp GPU 具有 384 位全局内存总线,而 P100 具有 3072 位内存总线。那么 32B、64B 或 128B 指令是如何映射到这些内存总线的。我如何测量 DRAM 控制器生成的事务数量?

PS: dram_read_transactions 指标似乎没有这样做。我之所以这么说,是因为我在 TitanXp 和 P100(即使在顺序访问期间)上获得了相同的 dram_read_transactions 值,尽管两者的总线宽度差异很大。

标签: cudagpunvidiagpgpu

解决方案


尽管 GPU DRAM 在不同的 GPU 类型上可能具有不同的(硬件)总线宽度,但总线始终由一组分区组成,每个分区的有效宽度为 32 字节。从分析器的角度来看,DRAM 事务实际上由这些 32 字节事务之一组成,而不是完整“总线宽度”的事务。

因此,到 L2 的(单个)32 字节事务如果在 L2 中未命中,将转换为单个 32 字节 DRAM 事务。更高粒度的事务(例如 64 字节或 128 字节)将转换为所需数量的 32 字节 DRAM 事务。这可以使用任何 CUDA 分析器发现。

此处此处的这些相关问题也可能很有趣。

请注意,上面使用的 32 字节的“有效宽度”并不一定意味着事务需要 32 字节 * 8 位/字节 = 256 位宽的接口。DRAM 总线可以是“双泵”或“四泵”,这意味着一个事务可能由接口的每条“线”传输的多个位组成。因此,您会发现 GPU 与 GPU DRAM 的接口只有 128 位宽(甚至 64 位宽),但这些总线上的“事务”仍将包含 32 字节,这将需要传输多个位(可能在多个 DRAM 总线时钟周期中)每个接口的“线”。


推荐阅读