Cuda 二级事务如何映射到GPU中的DRAM?

Cuda 二级事务如何映射到GPU中的DRAM?,cuda,gpu,nvidia,gpgpu,Cuda,Gpu,Nvidia,Gpgpu,在GPU中,二级缓存的事务大小可以是32B、64B或128B(读写)。此类交易的总数可以使用nvprof指标(如gst_交易和gld_交易)来衡量。但是,我找不到任何资料详细说明这些事务是如何映射到DRAM访问的,即通常具有不同总线宽度的DRAM是如何处理这些事务的?例如,TitanXp GPU具有384位全局内存总线,而P100具有3072位内存总线。那么32B、64B或128B指令是如何映射到这些内存总线的呢。如何测量DRAM控制器生成的事务数 PS:dram_read_事务度量似乎不能做到

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


PS:dram_read_事务度量似乎不能做到这一点。我这么说是因为我在TitanXp和P100上获得了相同的dram_read_事务值(即使在顺序访问期间),尽管这两个处理器的总线宽度相差很大。

尽管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总线时钟周期内)。

非常感谢您的快速详细回复。我还有一个疑问。所以当你说它的分区是32字节时,是不是意味着这些分区地址必须是连续的?例如,当访问字节0-32和字节2048到2080时,这能在同一个周期内完成吗?(假设DRAM至少有一条64字节宽的内存总线)。我问这个问题的原因是P100比TitanXp(具有相同的最大全局内存带宽)具有更宽的总线和更低的时钟。全局内存访问越随机,TitanXp相对于P100的性能就越好。这取决于特定的GPU。一般情况下无法回答,据我所知,有关全局逻辑地址空间中的顺序字节到DRAM段或事务的映射的详细信息尚未发布。在这方面,你的观察在泰坦Xp和P100之间的比较中可能是有洞察力的,但我不能提供一个明确的答案。哦。我试图收集一些数据来支持我的观察,并确保我没有遗漏任何其他因素。我想我得想点别的办法。无论如何,再次感谢您的帮助。:)@约翰斯波尔:我认为宽总线/低时钟不应该有影响:如果每秒的事务数相同(即相同的带宽),那么细节就不应该很重要。当然,这两个卡之间的带宽实际上并不相同。HBM2系统上的宽总线肯定会对某些“分散”的访问模式产生影响,OP的观察结果与此一致。然而,将产生更好或更差效率的确切模式激励尚未公开。安全的假设是,连续访问不会受到宽总线的不利影响,事实上,与GDDR5/5x/6系统相比,HBM2系统的可用带宽总体上有所改善。