105

我想听听有两者编码经验的人的意见。我自己,我只有 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 任务中实现?整数任务会发生什么?

4

10 回答 10

80

打个比方,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 代码的能力。如评论中所述,暂时没有 SSE 的 x86 受限
  • NVIDIA 和 CUDA 在可用库的范围内仍然具有优势。然而,他们可能不像以前那样专注于 OpenCL。

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

于 2011-01-09T17:23:40.437 回答
59

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

但是当前的 NVIDIA 与 ATI 卡的 GPGPU(不是图形性能,而是 GPGPU),我确实对此有强烈的看法。为此,我将指出,在当前的 500 强大型集群列表中,NVIDIA 将 AMD 4 系统排在第 1 位,在gpgpu.org上,NVIDIA的搜索结果(论文、在线资源链接等)超过 AMD 6:1 的结果。

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

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

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

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

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

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

于 2011-01-09T23:36:33.527 回答
17

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

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

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

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

于 2012-03-23T20:22:43.070 回答
7

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

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

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

于 2011-05-26T23:27:50.143 回答
7

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

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

对于 AMD:

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

  • 便宜的卡。

  • OpenCL 是其他供应商可用的开放标准。

对于英伟达:

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

  • 新麦克斯韦更节能。

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

在这一点上,如果 GPGPU 是您的目标,CUDA 是唯一的选择,因为带有 AMD 的 opencL 还没有为服务器场做好准备,而且由于编译器似乎总是“处于测试阶段”,因此为 AMD 编写高效代码要困难得多.

于 2014-10-25T23:07:39.493 回答
6

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

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

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

于 2012-09-04T17:47:56.730 回答
5

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

于 2011-01-09T18:46:50.003 回答
1

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

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

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

于 2011-01-10T10:32:20.323 回答
0

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

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

于 2013-04-07T06:50:27.523 回答
-2

在我的经验中:

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

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

  • 特别是如果你刚开始,cuda 往往会更加精致,并且拥有更多的工具和库。

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

于 2012-02-27T23:40:38.930 回答