【问题标题】:NVIDIA vs AMD: GPGPU performanceNVIDIA 与 AMD:GPGPU 性能
【发布时间】:2011-06-06 00:24:20
【问题描述】:

我想听听有这两种编码经验的人的意见。我自己,我只有 NVIDIA 的经验。

NVIDIA CUDA 似乎比竞争对手更受欢迎。 (仅计算这个论坛上的问题标签,'cuda' 胜过 'opencl' 3:1,'nvidia' 胜过 'ati' 15:1,并且根本没有 'ati-stream' 的标签)。

另一方面,根据维基百科,ATI/AMD 卡应该有更大的潜力,尤其是每美元。目前市场上最快的 NVIDIA 显卡 GeForce 580(500 美元)的额定单精度 TFlops 为 1.6。 AMD Radeon 6970 的售价为 370 美元,额定值为 2.7 TFlops。 580 有 512 个执行单元,频率为 772 MHz。 6970 有 1536 个执行单元,频率为 880 MHz。

AMD 相对于 NVIDIA 的纸张优势有多现实,是否有可能在大多数 GPGPU 任务中实现?整数任务会发生什么?

【问题讨论】:

  • 有趣的问题,但我不确定它是否真的与编程相关
  • 本质上是关于两种编程语言及其实现的实际方面的问题。所以我会说是的。
  • 我想知道这个问题的相关答案在 C++ AMP 中变得如何。
  • 有一次,我正在研究为什么与 AMD 相比,NVIDIA 硬件上的比特币挖矿速度如此之慢。生成的线程“AMD Radeon 3x faster on bitcoin mining (SHA-256 hashing performance)”包含您可能会发现有趣的信息。你的问题。 forums.nvidia.com/…
  • 在我看来,这个问题要么会导致收集意见,具体取决于受访者熟悉的应用领域、他们使用的硬件和软件等;或者一个全面的答案将太宽泛而无法适应 SO 格式。投票结束。

标签: cuda opencl gpgpu nvidia ati


【解决方案1】:

打个比方,ati 的引擎比 nvidia 好。 但是英伟达有更好的车:D

这主要是因为 nvidia 投入了大量资源(金钱和人力)来开发科学计算(BLAS、FFT)所需的重要库,然后又在推广它方面做得很好。与 ati(或 OpenCL)相比,这可能是 CUDA 在此处主导标签的原因

至于在 GPGPU 任务中实现的一般优势,最终将取决于其他问题(取决于应用程序),例如内存传输带宽、良好的编译器甚至驱动程序。 nvidia 拥有更成熟的编译器,Linux 上更稳定的驱动程序(Linux 因为它在科学计算中广泛使用),使天平向 CUDA 倾斜(至少目前如此)。


编辑 2013 年 1 月 12 日

我发表这篇文章已经两年了,有时它似乎仍然吸引了人们的关注。所以我决定澄清一些事情

  • AMD 已经加强了他们的游戏。他们现在同时拥有 BLAS 和 FFT 库。许多第三方库也在围绕 OpenCL 涌现。
  • 英特尔已将 Xeon Phi 引入野外,支持 OpenMP 和 OpenCL。它还具有使用现有 x86 代码的能力。 如 cmets 中所述,目前受限于没有 SSE 的 x86
  • NVIDIA 和 CUDA 在可用库的范围内仍然具有优势。不过,他们可能不像以前那样专注于 OpenCL。

简而言之,OpenCL 在过去两年中缩小了差距。该领域有新的球员。但是 CUDA 还是有点领先。

【讨论】:

  • 至强融核只有有限的 x86 代码执行能力。没有 MMX/SSE/SSE*。
  • @osgx 谢谢。我应该提到这一点。
  • @osgx 但在DP FP中表现不错
  • 至强融核具有 512 位宽的寄存器和指令,是 SSE 支持的 4 倍。
【解决方案2】:

我对 CUDA 与 OpenCL 没有任何强烈的感觉;据推测,OpenCL 是一个长期的未来,只是因为它是一个开放的标准。

但我对 GPGPU(不是图形性能,而是 GPGPU)的当前 NVIDIA 与 ATI 卡有强烈的看法。为此,我将指出,在current Top 500 list of big clusters 上,NVIDIA 领先 AMD 4 系统到 1,在gpgpu.org 上,NVIDIA 的搜索结果(论文、在线资源的链接等)超过 AMD 的结果6:1。

这种差异的很大一部分是可用的在线信息量。查看 NVIDIA CUDA Zone 与 AMD 的 GPGPU Developer Central。那里为开发人员启动的东西的数量甚至无法比较。在 NVIDIA 的网站上,您会发现大量的论文和贡献的代码,这些论文来自可能正在解决您的问题的人。您会发现大量来自 NVIDIA 和其他地方的在线课程,以及非常有用的文档,例如开发人员的最佳实践指南等。免费开发工具(分析器、cuda-gdb 等)的可用性极大地倾斜了 NVIDIA 的方式。

(编者:本段中的信息不再准确。)而且有些区别还在于硬件。 AMD 卡在峰值触发器方面具有更好的规格,但为了能够获得其中的很大一部分,您不仅必须将问题分解到许多完全独立的流处理器上,还需要对每个工作项进行矢量化。鉴于 GPGPU 的代码已经足够困难,额外的架构复杂性足以成败某些项目。

所有这一切的结果是 NVIDIA 用户社区不断发展壮大。在我认识的三四个考虑构建 GPU 集群的群体中,没有一个人在认真考虑 AMD 卡。这将意味着更多的团队在 NVIDIA 方面撰写论文、贡献代码等。

我不是 NVIDIA 的骗子;我希望不是这样,并且有两个(或更多!)同样引人注目的 GPGPU 平台。竞争是好的。也许 AMD 很快就会加强它的游戏 - 即将推出的融合产品看起来非常引人注目。但是,在向某人提供关于今天购买哪些卡以及现在将时间花在哪些方面的建议时,我不能凭良心说这两种开发环境都一样好。

编辑添加:我想上面的回答在回答原始问题方面有点省略,所以让我更明确一点。在一个无限可用时间的理想世界中,您可以从一块硬件获得的性能仅取决于底层硬件和编程语言的功能;但实际上,在固定的投入时间内获得的性能也很大程度上取决于开发工具、现有的社区代码库(例如,公开可用的库等)。这些考虑都强烈指向 NVIDIA。

(编者:本段信息已不再准确。)在硬件方面,AMD 卡中 SIMD 单元对矢量化的要求也使得实现纸张性能比使用 NVIDIA 硬件更加困难。

【讨论】:

  • 我正在使用 ATI Stream 学习 OpenCL,感谢关于矢量化的说明 :) 虽然我意识到 NVIDIA 的好处是……相当大,我只是支持 AMD/ATI 和公司本身,我有时间花制作库:DI 认为 OpenCL 的性能在未来几年肯定会提高,我希望我的代码也为此做好准备。
  • 看看您对 AMD 的 GCN 和 OpenCL 1.2 的看法会很有趣,现在(2013 年)simd 已成为过去。有什么净差吗?
  • @Jonathan 现在已经 3 年没有写这篇精彩的文章了。我想知道您认为 AMD 平台、社区和生态系统是否已经缩小了差距。
  • 对于视频或 GPGPU 卡来说不是太多,而对于处理器本身,我一直是 Intel 的粉丝而不是 AMD,但是最近 AMD 即将发布新的 ZEN 处理器标记测试显示,在默认设置下,它可以与英特尔的顶级 i7 处理器相媲美。他们的新技术应该会随着它识别指令模式而提高它的工作效率。所以我认为他们的大部分时间和精力都花在了这款新处理器上,而不是他们的 GPU 技术上。然而,一旦他们的 Zen 处理器发布,我相信英特尔会有更好的东西。
【解决方案3】:

AMD 和 NVIDIA 架构之间的主要区别在于 AMD 针对算法行为可以在编译时确定的问题进行了优化,而 NVIDIA 针对算法行为只能在运行时确定的问题进行了优化-时间。

AMD 有一个相对简单的架构,允许他们在 ALU 上花费更多的晶体管。只要可以在编译时完全定义问题并以某种静态或线性的方式成功映射到架构,AMD 很有可能能够比 NVIDIA 更快地运行算法。

另一方面,NVIDIA 的编译器在编译时进行的分析较少。相反,NVIDIA 拥有更先进的架构,他们在逻辑上花费了更多晶体管,能够处理仅在运行时出现的算法的动态行为。

我相信大多数使用 GPU 的超级计算机都与 NVIDIA 配套使用的事实是,科学家对运行计算感兴趣的问题类型通常更适合 NVIDIA 的架构而不是 AMD 的架构。

【讨论】:

  • 借助 GCN(下一代图形核心),AMD 已经从 SIMD 和 VLIW 转移到更类似于 NVIDIA 的架构(SIMT 和更灵活的指令调度)。
  • @AleksandrDubinsky:借助 Compute Capability 3.0 硬件,NVIDIA 通过取消动态调度向 AMD 靠拢。我认为他们的架构将在中间的某个地方融合。
  • 我以前听说过,但找不到任何具体信息。我在哪里可以找到这方面的更多详细信息?
【解决方案4】:

我在 OpenCL 中进行了一些迭代编码。在 NVIDIA 和 ATI 中运行它的结果几乎是一样的。 在相同价值 ($) 的卡片中速度几乎相同。

在这两种情况下,与 CPU 相比,速度大约是 CPU 的 10 倍至 30 倍。

我没有测试 CUDA,但我怀疑它能否神奇地解决我的随机内存获取问题。如今,CUDA 和 OpenCL 或多或少是相同的,我看到 OpenCL 的未来比 CUDA 更多。主要原因是英特尔正在为其处理器推出带有 OpenCL 的驱动程序。这将是未来的巨大进步(在 CPU 中运行 16、32 或 64 个线程的 OpenCL 非常快,并且非常容易移植到 GPU)。

【讨论】:

    【解决方案5】:

    在为 Fermi 和 Kepler 使用 CUDA 几年后,我在 GCN 卡上花了一些时间使用 OpenCL,我仍然更喜欢 CUDA 作为一种编程语言,如果可以选择,我会选择带有 CUDA 的 AMD 硬件。

    NVIDIA 和 AMD (OpenCL) 的主要区别:

    对于 AMD:

    • 即使使用 Maxwell,NVidia 仍然具有更长的命令延迟,并且在对两者进行简单优化后,复杂算法在 AMD 上可能会快 10 倍(假设相同的理论 Tflops)。 Kepler VS GCN 的差距高达 60%。从这个意义上说,为 NVidia 优化复杂内核更加困难。

    • 便宜的卡片。

    • OpenCL 是开放标准,其他供应商也可以使用。

    对于英伟达:

    • 拥有适用于可靠的高服务器负载的 Tesla 系列硬件。

    • 新的 Maxwell 更节能。

    • 编译器和工具更加先进。 AMD 仍然无法实现maxregcout 参数,因此您可以轻松控制各种硬件的占用率,并且他们的编译器有很多随机的想法,即什么是随每个版本而变化的最佳代码,因此您可能需要重新访问旧的每半年编码一次,因为它突然变慢了 40%。

    此时如果 GPGPU 是您的目标,那么 CUDA 是唯一的选择,因为带有 AMD 的 opencL 还没有为服务器场做好准备,而且由于编译器似乎总是“处于测试阶段”。

    【讨论】:

    • 感谢您的新鲜回答。您能否澄清“可能快 10 倍”的单位是什么?百分比?
    • 个人意见:在某种意义上,ATI 卡在某种意义上比 Nvidia 更好,但缺乏驱动程序更新支持,随着时间的推移,AMD 完全收购了 ATI,而 Nvidia 仍然是同一家公司。此外,Nvidia 仍然有更好的更新驱动程序支持。这更多地存在于卡的用户端,以提高应用程序的性能。不要误会我的意思,这两种技术都以自己的方式很棒,并且都有低端廉价卡和更昂贵的高端卡。随着时间的推移,我从 ATI 转到了 Nvidia。至于开发,Nvidia 拥有更好的功能集和可编程 API 或库。
    【解决方案6】:

    我是 GPGPU 的新手,但我在科学计算(物理学博士)方面有一些经验。我正在组建一个研究团队,我想继续使用 GPGPU 进行计算。我必须在可用平台之间进行选择。我决定选择 Nvidia 有几个原因:虽然 ATI 在纸面上可能更快,但 Nvidia 拥有更成熟的平台和更多文档,因此可以更接近该平台的峰值性能。

    Nvidia还有一个学术研究支持计划,可以申请支持,我刚收到一张TESLA 2075卡,我很高兴。我不知道 ATI 或 Intel 是否支持这种方式的研究。

    我听说 OpenCL 试图同时成为一切,确实,您的 OpenCL 代码将更具可移植性,但它也可能无法利用任一平台的全部功能。我宁愿多学一点,写出更好地利用资源的程序。对于今年刚刚推出的 TESLA K10,Nvidia 处于 4.5 TeraFlops 范围内,因此尚不清楚 Nvidia 是否落后……但英特尔 MIC 可能会成为真正的竞争对手,特别是如果他们成功地将 GPGPU 单元移动到主板。但就目前而言,我选择了英伟达。

    【讨论】:

    • 查看@AndrewCooke 对 NVidia(缺乏)支持的意见的回答。
    【解决方案7】:

    我在评估 OpenCL 浮点性能方面的经验倾向于支持 NVIDIA 显卡。我在从 8600M GT 到 GTX 460 的 NVIDIA 卡上进行了几个浮点基准测试。NVIDIA 卡在这些基准测试中始终达到理论单精度峰值的一半左右。
    我使用过的 ATI 卡很少能达到超过三分之一的单精度峰值。 请注意,我对 ATI 的体验是有偏差的;我只能使用一张 5000 系列卡。我的经验主要是使用 HD 4000 系列卡,这些卡从未得到很好的支持。对 HD 5000 系列卡的支持要好得多。

    【讨论】:

      【解决方案8】:

      我想加入辩论。对于从事软件业务的我们来说,我们可以将原始单精度性能与生产力妥协,但即使如此,我也不必妥协,因为正如已经指出的那样,使用 OpenCL 在 ATI 硬件上实现的性能无法达到您所能达到的水平如果您在 NVIDIA 的硬件上使用 CUDA 编写代码。

      是的,随着 PGI 宣布用于 CUDA 的 x86 编译器,将没有任何充分的理由花更多的时间和资源编写 OpenCL :)

      P.S:我的论点可能有偏见,因为我们几乎所有的 GPGPU 工作都是在 CUDA 上完成的。我们有一个图像处理/计算机视觉库 CUVI(CUDA for Vision and Imaging),它可以加速 CUDA 上的一些核心 IP/CV 功能。

      【讨论】:

        【解决方案9】:

        到目前为止,Cuda 肯定比 OpenCL 更受欢迎,因为它比 OpenCL 早 3 或 4 年发布。自从 OpenCL 发布以来,Nvidia 并没有为该语言做出太多贡献,因为他们非常专注于 CUDA。他们甚至还没有发布任何驱动程序的 openCL 1.2 版本。

        就异构计算和手持设备而言,OpenCl 肯定会在不久的将来获得更多的普及。截至目前,OpenCL 的最大贡献者是 AMD,它在他们的网站上可见。

        【讨论】:

          【解决方案10】:

          根据我的经验:

          • 如果您想要获得最佳绝对性能,那么您需要查看最新硬件迭代的用户,并使用他们的堆栈(包括最新/测试版)。

          • 如果您想要物有所值的最佳性能,您将瞄准玩家卡而不是“专业”卡,并且针对不同平台的灵活性有利于 opencl。

          • 如果您刚开始,尤其是,cuda 往往会更加完善并且拥有更多工具和库。

          最后,我个人的看法,在来自 nvidia 的骇人听闻的“支持”之后(我们得到了一辆死掉的特斯拉,几个月都没有改变,而客户正在等待):与 opencl 一起跳船的灵活性值得冒险当 nvidia 在发布周期中领先时,性能会稍低。

          【讨论】:

          • 与 nvidia 的“支持”类似的体验:libcuda.so 崩溃(仅适用于 OpenCL,CUDA 有效)并且没有任何回应。
          • 在我们的经销商那里,我们更换死特斯拉没有问题,通常我们会在收到新硬件之前发送有故障的硬件,所以我猜这不是 NVidia 的问题,而是您的经销商的问题。
          • 我认为特斯拉超级可靠。什么营销骗局。
          • OpenCL 不是性能可移植的,因此不可能每次一家公司发布新旗舰时都跳槽(不维护两个优化的代码分支)。此外,NVIDIA 的 OpenCL 支持落后了几个版本,而且我怀疑维护不善。
          猜你喜欢
          • 2012-02-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-07-23
          • 2015-08-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多