我有一个绑定数据移动的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?
感谢。
答案 0 :(得分:3)
正如Robert Crovella已经评论过,你的瓶颈是PCIe带宽,而不是GPU内存带宽。
你的GTX 680在这方面的表现可能比M2070高出两倍,因为它支持PCIe 3.0,它可以使M2070的PCIe 2.0接口的带宽翻倍。但是你需要一个支持PCIe 3.0的主板。
GPU内存的总线宽度本身并不是一个问题,即使对于受GPU内存带宽限制的程序也是如此。 Nvidia成功地大幅增加了GTX 680内存总线上使用的频率,这相当于弥补了相对于M2070的总线宽度减少。