达到理论GPU全局内存带宽

时间:2012-09-10 23:40:09

标签: memory global gpu bandwidth max

PREAMBLE: 假设我在CUDA中使用NVIDIA GTX480卡。该卡的理论峰值全局内存带宽为177.4 GB / s: 384 * 2 * 1848/8 * 1E9 = 177.4 GB / s

384来自内存接口宽度,2来自内存的DDR性质,1848是内存时钟频率(以MHz为单位),8来自我想在字节中获得答案的事实。

可以为共享内存计算类似的东西: 每个库4个字节* 32个库*每个周期0.5个库* 1400MHz * 15个SM = 1,344 GB / s

SM数量的上述因素数,即15.因此,要达到此最大共享内存带宽,我需要所有 15个SM读取共享内存。

我的问题: 为了达到最大全局内存带宽,仅从全局内存中读取一个 SM是否足够,或者所有SM是否应该同时尝试从全局内存中读取? 更具体地说,假设我使用一个具有32个线程的块启动内核。然后,如果我在SM-0上有唯一的warp,并且我在内核中所做的所有操作都以合并的方式从全局内存中不间断地读取,那么我将达到177.4 GB / s吗?或者我应该启动至少15个块,每个块有32个线程,以便SM-0到SM-14上的15个warp同时尝试读取?

最重要的事情可能是运行基准测试来解决这个问题。我想要了解为什么会发生什么,发生。

1 个答案:

答案 0 :(得分:2)

据我所知,GPU的片上网络是TPC和内存控制器的交叉开关。因此,理论上一个SM可以在不同的存储器控​​制器之间交织存储器访问以实现全全局带宽。但请注意,每个交叉开关接口都有一个缓冲区,如果此缓冲区不够大,则活动SM中的内存指令可能会停止。此外,每个SM具有有限的容量来保持未完成的存储器访问。这些问题可能会限制每个SM可以使用的内存带宽。所以,我认为你的问题的答案需要一些microbenchmarking,我猜一个SM不能利用整个全局内存带宽。