如何衡量GPU内存带宽?

22日视图(30天)
Anterrieu
Anterrieu 2013年4月10日
我有一个TeslaC1060 4 gb的内存。我跑步MatlabR2012b和我用下面的代码来测量主机和设备之间的内存带宽。
gpu = gpuDevice ()
N = 8192;data =兰德(N, N);%
k = 1:10 0
抽搐;
gdata = gpuArray(数据);等待(gpu);
CPU2GPU (k) = N ^ 2 * 8/1024 ^ 3 / toc;
抽搐;
data2 =收集(gdata);等待(gpu);
GPU2CPU (k) = N ^ 2 * 8/1024 ^ 3 / toc;
结束
图;
CPU2GPU情节(1:10 0,“r”。,GPU2CPU 1:10 0“b”。);
传奇(CPU - > GPU的,“GPU - > CPU”);
我发现不到1.5 Gb / s GPU和CPU和不到3.0 Gb / s从CPU、GPU(平均100个值最初的除外)。1)测量值为什么到目前为止从预期的8 Gb / s ?事实证明,100年值变化从一个运行到另一个几乎2倍。2)为什么这段代码的行为不是那么reproductible呢?
谢谢你的帮助。

接受的答案

本Tordoff
本Tordoff 2013年4月15日
嗨Anterrieu,
你也许想看看以下文章:
在这些结果中,实现了传输带宽大约是5.7 gb /秒(发送)和4.0 gb /秒(收集)。虽然我不能给你一个确切的答案为什么测量转移利率如此之低,不可靠的,需要考虑以下几点:
  1. 第二个“等(gpu)”在你不需要紧密的循环,将影响结果。记忆从设备传输到主机(即。“收集”)总是同步的。
  2. 你测量的速度传输数据从GPU /(即PCI总线的速度)。这不是一样的GPU内存带宽(问题标题所显示),这是多,高得多(> 90 gb /秒的GPU和最近的GPU更高)。
  3. 几乎是不可能精确测量在MATLAB的传输带宽。你在这里实际上是时间的时间分配一些空间(GPU在第一种情况下,在第二个主机内存),来执行数据传输和分配一个MATLAB函数。这些额外步骤采取一些(希望小)的时间将减少的结果。
  4. 的一些变化可能来自其他进程使用PCI总线。运行操作系统在一个高度精简模式没有网络等可能会有帮助。
如果你尝试本文中的代码,还看到低得多的结果,让我知道。但是请注意,你不测量GPU在这里,你只是测量多忙你的PCI总线和MATLAB可以把数据。这是一个重要的指标,但这通常不是最重要的,只要你做大量的计算数据一旦你把它放在GPU。如果你想知道更多关于你的GPU的计算性能,您可能喜欢GPUBench兜风:
1评论
Anterrieu
Anterrieu 2013年4月15日
感谢本这个答案。事实上,这段代码来源于一个引用从罗兰和基准。然而,我认为,从只有一个运行获得一些不严重的(这是我认为作为一个研究科学家)这就是为什么我跑超过100000次为了获得更准确的值。GPUtoGPU stdv因为我是准确的值很小,但对于GPUtoCPU和CPUtoGPU显然2值也不同一个从其他15%:这不是一个小的变化由于CPU活动在测试期间(顺便说一下个人电脑断开网络,所有的系统活动是关闭)的差异并不是周期性和两个转移之间没有相关性。这是我所知道的,但我还是一种流网和我已经发现的某些方面的GPU实现MathWorks没有记录…

登录置评。

更多的答案(0)

类别

找到更多的在GPU计算帮助中心文件交换

标签

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!