我想听听具有这两种编码经验的人的意见。就我个人而言,我只拥有 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 任务中实现?整数任务会发生什么?

有帮助吗?

解决方案

与Nvidia相比,隐喻性的ATI具有良好的引擎。但是Nvidia有更好的汽车:D

这主要是因为NVIDIA投入了大量资源(在金钱和人员上),以开发科学计算(BLAS,FFT)所需的重要库,然后在推广它方面再次做出了一项好工作。这可能是CUDA与ATI(或OpenCL)相比,CUDA主导此处的标签的原因

至于在GPGPU任务中实现的优势,最终将取决于其他问题(取决于应用程序),例如内存传输带宽,一个好的编译器,甚至可能是驱动程序。 NVIDIA具有更成熟的编译器,是Linux上更稳定的驱动程序(由于其在科学计算中的使用广泛),将平衡倾斜以支持CUDA(至少目前)。


编辑 2013年1月12日

自从我发表这篇文章以来已经两年了,有时似乎仍然会吸引观点。所以我决定澄清一些事情

  • AMD加强了他们的比赛。他们现在拥有Blas和FFT库。 OpenCl周围也正在出现许多第三方图书馆。
  • 英特尔已将Xeon Phi引入了野外,支持OpenMP和OpenCL。它还具有使用现有X86代码的能力。 如评论中指出的那样,暂时没有SSE限制X86
  • NVIDIA和CUDA仍然具有可用库范围的优势。但是,他们可能没有像以前那样关注OpenCL。

简而言之,在过去的两年中,OpenCl缩小了差距。该领域有新球员。但是库达仍然领先一些。

其他提示

我对Cuda vs. Opencl没有任何强烈的感觉;据推测,Opencl是长期的未来,仅仅是作为一个开放标准的准备。

但是当前的Nvidia vs ATI卡用于GPGPU(不是图形性能,而是GPGPU),我对我确实有强烈的看法。为此,我指出的是 当前的前500个大型集群清单, ,NVIDIA将AMD 4系统带到1,然后 gpgpu.org, ,搜索结果(论文,指向在线资源的链接等),用于AMD 6:1的NVIDIA超过结果。

这种差异的很大一部分是可用的在线信息的数量。查看NVIDIA 库达区 对AMD GPGPU开发人员中心. 。开发人员启动的东西的数量甚至没有接近比较。在NVIDIAS网站上,您可能会发现可能从事像您这样的问题的人来发现大量的论文 - 并贡献了代码。您会发现来自NVIDIA和其他地方的大量在线课程,以及非常有用的文档,例如开发人员的最佳实践指南等。免费Devel工具的可用性 - Profiler,Cuda -GDB等 - 压倒性地倾斜了Nvidias Way。

(编辑:本段中的信息不再准确。)某些差异也是硬件。 AMDS卡在峰值失败方面具有更好的规格,但是要获得很大一部分,您不仅必须将问题分解到许多完全独立的流处理器上,而且每个工作项还需要矢量化。鉴于GPGPPY的代码足够困难,因此额外的架构复杂性足以制定或破坏某些项目。

所有这一切的结果是NVIDIA用户社区不断增长。在我认识的三个或四个小组中,在建造GPU群集中,没有一个认真考虑AMD卡。这将意味着更多的小组在NVIDIA方面编写论文,贡献代码等。

我不是Nvidia Shill;我希望不是这样,并且有两个(或更多!)同样引人注目的GPGPU平台。竞争很好。也许AMD很快就会加强游戏 - 即将推出的Fusion产品看起来非常引人注目。但是,在给某人关于今天要购买的卡以及现在花时间付出努力的建议时,我不能很好地良心说这两个开发环境都同样好。

编辑要添加: :我想以上关于回答原始问题的椭圆形有点椭圆形,所以让我更加明确。在一个理想的世界中,您可以从硬件中获得的性能仅取决于编程语言的基础硬件和功能。但实际上,您可以在固定的时间内获得的绩效量也很大程度上取决于开发工具,现有的社区代码库(例如,公开可用的库等)。这些考虑都强烈指向Nvidia。

(编辑:本段中的信息不再准确。)就硬件而言,AMD卡中SIMD单元内对矢量化的需求也使得与NVIDIA硬件相比,实现纸张性能甚至更难。

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

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

另一方面,NVIDIA的编译器在编译时进行了较少的分析。取而代之的是,NVIDIA具有更高级的体系结构,他们在逻辑上花费了更多的晶体管,能够处理仅在运行时出现的算法的动态行为。

我认为,大多数使用GPU与NVIDIA一起使用的超级计算机的事实是,科学家对运行计算感兴趣的问题类型在一般地图上比AMD更好。

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

在这两种情况下,与CPU相比,速度均为约10x-30x。

我没有测试CUDA,但我怀疑它可以神奇地解决我的随机内存提出问题。如今,Cuda和Opencl或多或少是相同的,我在Opencl上比Cuda更远的未来。主要原因是英特尔正在使用OpenCL为其处理器启动驱动程序。这将是将来的巨大进步(在CPU中运行16、32或64个线程的OPENCL非常快,非常易于移植到GPU)。

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

NVIDIA和AMD(OPENCL)的主要差异:

对于AMD:

  • 即使有Maxwell,NVIDIA仍然具有更长的命令潜伏期,并且在对两者进行易于优化之后,在AMD上,复杂的算法在AMD上的速度可能更快(假设相同的理论Tflops)。开普勒与GCN的差距高达60%。从这个意义上讲,很难优化NVIDIA的复杂核。

  • 便宜的卡。

  • OpenCL是开放标准,可与其他供应商一起使用。

对于nvidia:

  • 具有适用于可靠的高服务器负载的特斯拉线系列。

  • 新麦克斯韦更加有效。

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

在这一点上,如果GPGPU是您的目标,CUDA是唯一的选择,因为使用AMD的OPENCL还没有准备好用于服务器农场,并且由于编译器似乎总是在Beta中为“ Beta”,因此很难为AMD编写有效的AMD代码。 。

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

Nvidia还拥有一项学术研究支持计划,可以申请支持,我刚刚收到了Tesla 2075卡,我感到非常高兴。我不知道ATI或英特尔是否支持这种方式。

我对OpenCL的了解是,它正在尝试一次成为一切,确实,您的OpenCL代码将更加便携,但也很可能不会利用这两个平台的完整功能。我宁愿学习更多,并编写更好地利用资源的程序。由于Tesla K10今年出现了NVIDIA在4.5 Teraflops系列中,因此尚不清楚NVIDIA落后了...但是Intel MICS可以证明是真正的竞争对手,尤其是如果他们成功将GPGPU单位转移到GPGPU上主板。但是就目前而言,我选择了Nvidia。

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

我想补充辩论。对于我们在软件业务中,我们可以将原始的单精制绩效妥协到生产力,但即使我不必妥协,因为正如已经指出的那样,您无法实现ATI的硬件,在ATI的硬件上无法实现尽可能多的效果。如果您在Nvidia的硬件上写入CUDA。

是的,在PGI宣布X86编译器为CUDA宣布的情况下,没有任何充分的理由花更多的时间和资源在Opencl中写作:)

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

截至今天,CUDA肯定比Opencl很受欢迎,因为它是在Opencl前3或4年发布的。自Opencl发布以来,NVIDIA对语言的贡献并不多,因为它们专注于Cuda。他们甚至没有为任何驱动程序发布OpenCL 1.2版本。

就相关OPENCL而言,与异质计算以及手持设备有关,肯定会在不久的将来获得更大的知名度。截至目前,OpenCL的最大贡献是AMD,在他们的网站上可以看到。

在我的经验中:

  • 如果您想要最佳的绝对性能,那么您需要查看谁是最新的硬件迭代中的谁,并使用其堆栈(包括最新 / beta版本)。

  • 如果您想要最佳的钱,您将瞄准游戏卡,而不是“专业”卡,并且针对不同平台的灵活性有利于OpenCl。

  • 特别是,如果您刚开始时,CUDA往往会更加抛光,并拥有更多的工具和库。

最后,我个人的看法是在Nvidia的“支持”之后(我们有一个死去的特斯拉,而且几个月来都没有改变,而在客户等待的时候):与OpenCl一起跳船的灵活性值得稍低的性能稍低当Nvidia在发行周期中领先时。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top