Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Memory 达到理论GPU全局内存带宽_Memory_Global_Gpu_Bandwidth_Max - Fatal编程技术网

Memory 达到理论GPU全局内存带宽

Memory 达到理论GPU全局内存带宽,memory,global,gpu,bandwidth,max,Memory,Global,Gpu,Bandwidth,Max,序言: 假设我在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 SMs=1344 GB/s 以上数字是短信数量的一个因素,即15条。因此,为了达到这个最大共享内存带宽,我需要让

序言: 假设我在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 SMs=1344 GB/s

以上数字是短信数量的一个因素,即15条。因此,为了达到这个最大共享内存带宽,我需要让所有15条短信读取共享内存

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


立即要做的事情可能是运行一个基准测试来解决这个问题。不过我想了解为什么会发生这样的事情。

据我所知,GPU的片上网络是TPC和内存控制器的交叉。因此,理论上,一个SM可以在不同的内存控制器之间交错内存访问,以实现完整的全局带宽。但是请注意,每个crossbar接口都有一个缓冲区,如果缓冲区不够大,那么活动SM中的内存指令可能会暂停。此外,每个SM保持杰出内存访问的能力有限。这些问题可能会限制每个SM可以利用的内存带宽。所以,我想你的问题的答案需要一些,我猜一个SM不能利用整个全局内存带宽