我有一个受数据移动限制的 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?
谢谢。