我目前正在开发一种CUDA应用程序,它肯定会在GPU上部署得比我的好得多。鉴于另一种GPU模型,我如何估计算法在其上运行的速度有多快?
答案 0 :(得分:2)
由于种种原因,你将度过难关:
时钟速率和内存速度与代码速度之间只有很弱的关系,因为有很多内容(例如,线程上下文切换)会在几乎所有新硬件上得到改进/更改。< / p>
缓存已被添加到新硬件(例如Fermi)中,除非您对缓存命中/未命中率进行建模,否则您将很难预测这将如何影响速度。
浮点性能通常非常依赖于模型(例如:特斯拉C2050的性能优于“顶级”GTX-480)。
每台设备的注册使用量可能因不同设备而异,这也会影响性能;在许多情况下,入住率会受到影响。
通过定位特定硬件可以提高性能,因此即使您的算法非常适合您的GPU,如果您针对新硬件进行优化也可能会更好。
现在,如果您通过其中一个分析器(例如NVIDIA Compute Profiler)运行您的应用程序,您可以做出一些预测,然后查看您的占用率和SM利用率。如果你的GPU有2个SM而你最终运行的那个有16个SM,那么你几乎肯定会看到一个改进,但不是因为这个。
所以,不幸的是,制作你想要的预测类型并不容易。如果您正在编写开源代码,可以发布代码并让其他人使用更新的硬件对其进行测试,但这并不总是一种选择。
答案 1 :(得分:2)
对于某些硬件更改而言,这可能非常难以预测,而对于其他硬件更改则是微不足道的。 突出显示您正在考虑的两张卡之间的差异。
例如,改变可能是微不足道的 - 如果我购买了其中一个EVGA水冷庞然大物,它的性能会比标准GTX 580好多少?这只是计算限制时钟速度(存储器或gpu时钟)差异的练习。当我想知道我是否应该超频我的卡时,我也遇到过这个问题。
如果您要使用类似架构,GTX 580到Tesla C2070,您可以在时钟速度方面做出类似的差异,但您必须小心单/双精度问题。
如果你正在做一些更激烈的事情,比如说从移动卡 - GTX 240M - 到线卡的顶部 - 特斯拉C2070 - 那么你可能无法获得任何性能提升所有强>
注意:Chris的答案非常正确,但我想强调这一点,因为我设想了这个共同的工作路径:
有人对老板说:
X
更有效率。那发生了什么?在旧卡上进行开发,想想8800,9800,甚至是具有30个内核的移动GTX 2XX,都会以一种非常不同的方式优化和设计算法,从而有效地利用512核的卡。 警告Emptor 你得到的是你付出的代价 - 那些很棒的卡 很棒 - 但是你的代码可能跑得不快。
发出警告,什么是离开的消息?当您获得更好的卡时,请务必投入时间进行调整,测试,并可能从头开始重新设计算法。
好的,这样说,经验法则? GPU每六个月获得两倍的速度。因此,如果你从一张两岁的卡片转移到一张顶级的卡片上,那么你的老板会说它的速度会提高4到8倍(如果你能获得16倍的提升,那就大胆了! !)