Cuda 更改NVIDIA GPU型号时估计速度增长

Cuda 更改NVIDIA GPU型号时估计速度增长,cuda,gpu,time-estimation,Cuda,Gpu,Time Estimation,我目前正在开发一个CUDA应用程序,它肯定会部署在比我更好的GPU上。考虑到另一个GPU模型,我如何估计我的算法在其上运行的速度?由于以下几个原因,您将面临一段困难时期: 时钟频率和内存速度与代码速度的关系很弱,因为几乎所有新硬件都有很多改进/改变的秘密(例如线程上下文切换) 缓存已添加到新硬件(如费米)中,除非对缓存命中/未命中率进行建模,否则很难预测这将如何影响速度 浮点性能通常非常依赖于型号(例如:特斯拉C2050的性能优于“顶级”GTX-480) 对于不同的设备,每个设备的寄存器使用情况

我目前正在开发一个CUDA应用程序,它肯定会部署在比我更好的GPU上。考虑到另一个GPU模型,我如何估计我的算法在其上运行的速度?

由于以下几个原因,您将面临一段困难时期:

  • 时钟频率和内存速度与代码速度的关系很弱,因为几乎所有新硬件都有很多改进/改变的秘密(例如线程上下文切换)

  • 缓存已添加到新硬件(如费米)中,除非对缓存命中/未命中率进行建模,否则很难预测这将如何影响速度

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

  • 对于不同的设备,每个设备的寄存器使用情况可能会发生变化,这也会影响性能;在许多情况下,入住率会受到影响

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

  • 现在,如果你通过一个剖析器运行你的应用程序(比如英伟达计算剖析器),你可以做一些预测,你看看你的占有率和你的SM利用率。如果你的GPU有2条短信,而你最终运行的GPU有16条短信,那么你几乎肯定会看到一个改进,但不是特别因为这个


    因此,不幸的是,要做出你想要的预测并不容易。如果您正在编写开放源代码,您可以发布代码并要求其他人使用较新的硬件进行测试,但这并不总是一个选项。

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

    例如,这一变化可能微不足道——如果我购买了一台EVGA水冷庞然大物,它的性能会比标准GTX 580好多少?这只是计算极限时钟速度(内存或gpu时钟)差异的练习。我在考虑是否应该超频我的卡时也遇到了这个问题

    如果你打算采用类似的架构,GTX 580到特斯拉C2070,你可以在时钟速度上做出类似的差异,但你必须小心单/双精度问题

    如果您正在做一些更激烈的事情,比如从一个移动卡GTX 240M到一个顶级卡Tesla C2070,那么您可能根本得不到任何性能改进。

    注:Chris的回答非常正确,但我想强调这一点,因为我设想了一条共同的工作道路:

    一个人对老板说:

  • 所以我听说了CUDA的事。。。我认为它可以使函数
    X
    更加高效
  • 老板说你可以有0.05%的工作时间来测试CUDA——嘿,我们已经有了这张手机卡,用它吧
  • 一年后。。。所以CUDA可以给我们三倍的加速。我可以买一张更好的卡来测试它吗?(GTX580只需400美元——比实习生的惨败还便宜…)
  • 你花了$$,买了卡,你的CUDA代码运行得更慢
  • 你的老板现在很生气。你浪费了时间和金钱
  • 发生了什么事?在一张旧卡上开发,比如8800、9800,甚至是30核左右的移动GTX 2XX,这将导致人们以一种与高效利用512核卡截然不同的方式优化和设计算法。警告买主,否则你会得到你所付的东西——那些很棒的卡片是很棒的——但是你的代码可能不会运行得更快

    发出警告,什么是退出消息?当你得到一张更好的卡片时,一定要投入时间在调整、测试上,并可能从头开始重新设计你的算法


    好的,这么说,经验法则?GPU的速度每六个月提高一倍。因此,如果你要从一张2年的卡片换成一张顶级的卡片,向你的老板宣称它的运行速度会快4到8倍(如果你得到了16倍的提升,太棒了!!)

    除非你谈论的是双精度浮点性能,GTX480比C2050快得多-它有更多的内核和更高的内存带宽感谢您的回答M.Tibbits。你说过‘一定要花时间调整’我的算法。我应该寻找什么样的东西作为GPU模型之间的差异来执行此调整?内存容量、块大小、寄存器计数和可能的并发内核。