在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值(即使在顺序访问期间),尽管两者的总线宽度差异很大。
答案 0 :(得分:5)
虽然GPU DRAM可能在不同的GPU类型上具有不同的(硬件)总线宽度,但总线总是由一组分区组成,每个分区的有效宽度为32字节。从分析器角度来看,DRAM事务实际上包含这些32字节事务中的一个,而不是完全"总线宽度"的事务。
因此,L2的(单个)32字节事务(如果它在L2中未命中)将转换为单个32字节的DRAM事务。更高粒度的事务(例如64字节或128字节)将转换为必需数量的32字节DRAM事务。使用任何CUDA分析器都可以发现这一点。
请注意"有效宽度"如上所述,32字节不一定意味着事务需要32字节* 8比特/字节= 256比特宽的接口。 DRAM总线可以“双泵”#34;或"四泵"这意味着交易可能包含每个" wire"的界面。因此,你会发现GPU只有128位宽(甚至64位宽)接口的GPU,而且是一个"事务"在这些总线上仍将包含32个字节,这将需要传输多个位(可能在多个DRAM总线时钟周期内)每个线路#34;界面。