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