2

我有一个受数据移动限制的 CUDA 应用程序(即从主机到设备的大型内存副本,在内核中完成的计算相对较少)。在较旧的 GPU 上,我受计算限制(例如 QUADRO FX 5800),但对于 Fermi 和 Kepler 架构,情况不再如此(对于我的优化代码)。

我刚刚将我的代码移到了 GTX 680,并且对计算性能的提高印象深刻,但对主机和 GPU 之间的带宽似乎已经下降(相对于我的 Fermi M20270)感到困惑。

简而言之,当我运行罐装 SDK 带宽测试时,我在 GTX 680 上获得约 5000 MB/秒,而在 M2070 上获得约 5700 MB/秒。我承认 GTX 只是“一张游戏卡”,但 GTX 680 的规格似乎比 M2070 更令人印象深刻,但总线宽度除外。

来自维基百科:M2070:102.4 GB/秒,GDDR3,512 位总线宽度 GTX 680:192 GB/秒,GDDR5,256 位总线宽度

我正在使用“--wc --memory=pinned”运行预设测试以使用写入组合内存。

我通过此测试获得的改进结果反映在我使用优化的 CUDA 代码获得的结果中。

不幸的是,我不能在同一台机器上运行测试(只能切换显卡),但我已经在旧机器和新机器上尝试了 GTX 680,并得到了相同的“降级”结果(相对于我在 M2070 上得到的结果) )。

谁能确认他们能够使用 M2070 Quadro 实现比 GTX 680 更高的内存副本吞吐量?带宽规格没有考虑总线宽度吗?另一种可能性是我没有在 GTX 680 上正确/最佳地进行内存复制,但在这种情况下,是否有用于带宽测试的补丁,这样它也会显示我向 680 传输数据的速度比到M2070?

谢谢。

4

1 回答 1

3

正如 Robert Crovella 已经评论的那样,您的瓶颈是 PCIe 带宽,而不是 GPU 内存带宽。

您的 GTX 680 可能比 M2070 的性能高出两倍,因为它支持 PCIe 3.0,这使 M2070 的 PCIe 2.0 接口的带宽增加了一倍。但是,您需要一个支持 PCIe 3.0 的主板。

GPU 内存的总线宽度本身并不是一个问题,即使对于受 GPU 内存带宽限制的程序也是如此。Nvidia 设法大幅提高了 GTX 680 内存总线上使用的频率,这足以弥补相对于 M2070 减少的总线宽度。

于 2012-10-15T18:10:01.377 回答