在改变NVIDIA GPU模型时估计速度的提高

时间:2011-07-12 01:50:28

标签: cuda gpu-programming time-estimation

我目前正在开发一种CUDA应用程序,它肯定会在GPU上部署得比我的好得多。鉴于另一种GPU模型,我如何估计算法在其上运行的速度有多快?

2 个答案:

答案 0 :(得分:2)

由于种种原因,你将度过难关:

  1. 时钟速率和内存速度与代码速度之间只有很弱的关系,因为有很多内容(例如,线程上下文切换)会在几乎所有新硬件上得到改进/更改。< / p>

  2. 缓存已被添加到新硬件(例如Fermi)中,除非您对缓存命中/未命中率进行建模,否则您将很难预测这将如何影响速度。

  3. 浮点性能通常非常依赖于模型(例如:特斯拉C2050的性能优于“顶级”GTX-480)。

  4. 每台设备的注册使用量可能因不同设备而异,这也会影响性能;在许多情况下,入住率会受到影响。

  5. 通过定位特定硬件可以提高性能,因此即使您的算法非常适合您的GPU,如果您针对新硬件进行优化也可能会更好。

  6. 现在,如果您通过其中一个分析器(例如NVIDIA Compute Profiler)运行您的应用程序,您可以做出一些预测,然后查看您的占用率和SM利用率。如果你的GPU有2个SM而你最终运行的那个有16个SM,那么你几乎肯定会看到一个改进,但不是因为这个。

    所以,不幸的是,制作你想要的预测类型并不容易。如果您正在编写开源代码,可以发布代码并让其他人使用更新的硬件对其进行测试,但这并不总是一种选择。

答案 1 :(得分:2)

对于某些硬件更改而言,这可能非常难以预测,而对于其他硬件更改则是微不足道的。 突出显示您正在考虑的两张卡之间的差异

例如,改变可能是微不足道的 - 如果我购买了其中一个EVGA水冷庞然大物,它的性能会比标准GTX 580好多少?这只是计算限制时钟速度(存储器或gpu时钟)差异的练习。当我想知道我是否应该超频我的卡时,我也遇到过这个问题。

如果您要使用类似架构,GTX 580到Tesla C2070,您可以在时钟速度方面做出类似的差异,但您必须小心单/双精度问题。

如果你正在做一些更激烈的事情,比如说从移动卡 - GTX 240M - 到线卡的顶部 - 特斯拉C2070 - 那么你可能无法获得任何性能提升所有

注意:Chris的答案非常正确,但我想强调这一点,因为我设想了这个共同的工作路径:

有人对老板说:

  1. 所以我听说过这个CUDA的事情......我认为它可以使函数X更有效率。
  2. Boss说你可以有0.05%的工作时间来测试CUDA - 嘿,我们已经有了这张移动卡,使用
  3. 一年后......所以CUDA可以让我们加速三倍。我可以买一张更好的卡来测试吗? (GTX 580只需400美元 - 比实习生惨败......)
  4. 你花了$$,买卡,你的CUDA代码
  5. 你的老板现在心烦意乱。你浪费了时间和金钱
  6. 那发生了什么?在旧卡上进行开发,想想8800,9800,甚至是具有30个内核的移动GTX 2XX,都会以一种非常不同的方式优化和设计算法,从而有效地利用512核的卡。 警告Emptor 你得到的是你付出的代价 - 那些很棒的卡 很棒 - 但是你的代码可能跑得不快

    发出警告,什么是离开的消息?当您获得更好的卡时,请务必投入时间进行调整,测试,并可能从头开始重新设计算法

    好的,这样说,经验法则? GPU每六个月获得两倍的速度。因此,如果你从一张两岁的卡片转移到一张顶级的卡片上,那么你的老板会说它的速度会提高4到8倍(如果你能获得16倍的提升,那就大胆了! !)