我想听听那些有两种编码经验的人的意见。我自己,我只有NVIDIA的经验。
NVIDIA CUDA似乎比竞争对手更受欢迎。 (只计算这个论坛上的问题标签,'cuda'优于'opencl'3:1,'nvidia'优于'ati '15:1,并且根本没有'ati-stream'标签。
另一方面,根据维基百科的说法,ATI / AMD显卡应具有更大的潜力,特别是每美元。目前市场上最快的NVIDIA显卡,GeForce 580(500美元),评级为1.6单精度TFlops。 AMD Radeon 6970的售价为370美元,售价为2.7 TFlops。 580具有512个执行单元,772 MHz。 6970具有1536个执行单元,频率为880 MHz。
AMD相对于NVIDIA的纸张优势有多现实,是否可能在大多数GPGPU任务中实现?整数任务会发生什么?
答案 0 :(得分:79)
隐喻地说ati与nvidia相比具有良好的引擎。 但是nvidia有一辆更好的车:D
这主要是因为nvidia已投入大量资源(资金和人力)来开发科学计算所需的重要图书馆(BLAS,FFT),然后再次推广它。与ati(或OpenCL)
相比,这可能是CUDA在这里主导标签的原因至于GPGPU任务中通常会实现的优势,它最终将取决于其他问题(取决于应用程序),例如内存传输带宽,良好的编译器甚至驱动程序。 nvidia有一个更成熟的编译器,一个更稳定的Linux驱动程序(linux因为,它在科学计算中广泛使用),倾向于平衡有利于CUDA(至少目前)。
编辑 2013年1月12日
我做这篇帖子已经两年了,有时似乎仍然会吸引人们的观点。所以我决定澄清一些事情
总之,OpenCL在过去两年缩小了差距。该领域有新的参与者。但是CUDA仍然领先一步。
答案 1 :(得分:59)
我对CUDA与OpenCL没有任何强烈的感情;大概是OpenCL是一个长期的未来,只是作为一个开放的标准。
但目前的NVIDIA与GPGPU的ATI卡(不是图形性能,但GPGPU),我确实有很强的意见。为了引导它,我将指出在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的卡在峰值触发器方面具有更好的规格,但是为了能够获得相当大的一部分,您不仅要将问题分解到许多完全独立的流处理器上,还需要对每个工作项进行矢量化。鉴于GPGPUing代码很难,这种额外的架构复杂性足以构成或破坏某些项目。
所有这一切的结果是NVIDIA用户社区继续增长。在我认为构建GPU集群的三四组中,没有人认真考虑AMD卡。这意味着更多的团体在NVIDIA方面撰写论文,贡献代码等。
我不是NVIDIA先生;我希望不是这样,并且有两个(或更多!)同样引人注目的GPGPU平台。竞争很好。也许AMD将很快加强其游戏 - 即将推出的融合产品看起来非常引人注目。但是,在向某人提供有关今天购买哪些卡以及在何时花费时间进行努力的建议时,我不能说良好的说两种开发环境都同样好。
编辑添加:我想在回答原始问题时,上面的内容有点椭圆,所以让我更明确一点。在一个具有无限可用时间的理想世界中,您可以从一块硬件获得的性能仅取决于底层硬件和编程语言的功能;但实际上,在固定的投入时间内可以获得的性能量也很大程度上取决于开发工具,现有的社区代码库(例如,公共可用的库等)。这些考虑都强烈指向NVIDIA。
(编者:本段中的信息不再准确。)在硬件方面,AMD卡中SIMD单元内矢量化的要求也使得纸张性能比使用NVIDIA硬件更难实现。
答案 2 :(得分:17)
AMD和NVIDIA架构的主要区别在于AMD针对在编译时可以确定算法行为的问题进行了优化,同时NVIDIA针对算法行为只能在运行时确定的问题进行了优化 - 时间。
AMD拥有相对简单的架构,允许他们在ALU上花费更多的晶体管。只要问题可以在编译时完全定义并以某种静态或线性的方式成功映射到架构,AMD很有可能比NVIDIA更快地运行算法。另一方面,NVIDIA的编译器在编译时进行的分析较少。相反,NVIDIA拥有更先进的架构,他们在逻辑上花费了更多的晶体管,能够处理仅在运行时出现的算法的动态行为。
我相信使用GPU的大多数超级计算机与NVIDIA一起使用的事实是,科学家们对计算运行感兴趣的问题类型,通常比AMD更好地映射到NVIDIA的架构。
答案 3 :(得分:7)
我在OpenCL中做了一些迭代编码。在NVIDIA和ATI中运行它的结果几乎是一样的。 在相同价值($)的卡片中接近相同的速度。
在这两种情况下,与CPU相比,速度约为10x-30x。
我没有测试CUDA,但我怀疑它可以神奇地解决我的随机内存获取问题。如今,CUDA和OpenCL或多或少相同,我认为OpenCL的未来比CUDA更多。主要原因是英特尔正在为其处理器推出采用OpenCL的驱动程序。这将是未来的一个巨大进步(在CPU中运行16,32或64个OpenCL线程非常快,并且很容易移植到GPU)。
答案 4 :(得分:7)
在为Fermi和Kepler开发CUDA几年后,我花了一些时间用于GCN卡,我仍然更喜欢CUDA作为一种编程语言,如果我有一个选项,我会选择带有CUDA的AMD硬件。
即使使用Maxwell,NVidia仍然具有更长的命令延迟,并且在对两者进行简单优化之后,复杂算法在AMD上可能会快10倍(假设理论Tflops相同)。 Kepler VS GCN的差距高达60%。从这个意义上说,为NVidia优化复杂内核更加困难。
廉价卡片。
OpenCL是开放标准,可供其他供应商使用。
Tesla系列硬件是否适合可靠的高服务器负载。
新麦克斯韦的功效更高。
编译器和工具更先进。 AMD仍然无法实现maxregcout
参数,因此您可以轻松控制各种硬件的占用率,并且他们的编译器有很多关于什么是每个版本更改的最佳代码的随机概念,因此您可以需要每半年重新访问旧代码,因为它突然变得慢了40%。
此时如果GPGPU是你的目标,那么CUDA是唯一的选择,因为带有AMD的opencL还没有为服务器群做好准备,而且由于编译器始终为AMD编写高效的代码,因此更加困难似乎是"在beta"。
答案 5 :(得分:6)
我是GPGPU的新手,但我在科学计算方面有一些经验(物理学博士)。我正在组建一个研究小组,我想要使用GPGPU进行计算。我不得不在可用的平台之间做出选择。我决定使用Nvidia,原因有两个:虽然ATI可能在纸面上更快,但Nvidia拥有更成熟的平台和更多文档,因此可以更接近该平台的最高性能。
Nvidia还有一个学术研究支持计划,一个可以申请支持,我刚收到一张TESLA 2075卡,我很高兴。我不知道ATI或英特尔是否支持这种研究。
我听说OpenCL的原因是它试图立即成为一切,确实你的OpenCL代码更具可移植性,但它也可能无法利用任何一个平台的全部功能。我宁愿多学习一下,编写更好地利用资源的程序。今年刚刚推出的TESLA K10 Nvidia处于4.5 TeraFlops范围内,因此不清楚Nvidia是否落后......但是,英特尔MIC可能会成为真正的竞争对手,特别是如果他们成功将GPGPU单元转移到主板。但就目前而言,我选择了Nvidia。
答案 6 :(得分:5)
我在评估OpenCL浮点性能方面的经验往往有利于NVIDIA显卡。我在NVIDIA显卡上使用了几个浮点基准测试,从8600M GT到GTX 460.NVIDIA显卡在这些基准测试中始终达到理论单精度峰值的一半左右。 我使用的ATI卡很少能达到单精度峰值的三分之一。 请注意,我对ATI的体验有所偏差;我只能使用一张5000系列卡。我的经验主要是HD 4000系列卡,这些卡从未得到很好的支持。支持HD 5000系列显卡要好得多。
答案 7 :(得分:1)
我想补充一下辩论。对于我们的软件业务,我们可以将原始的单精度性能降低到生产率,但即使我不必妥协,因为正如已经指出的那样,使用OpenCL无法在ATI的硬件上实现尽可能多的性能如果你在NVIDIA的硬件上用CUDA写的话。
是的,随着PGI宣布推出针对CUDA的x86编译器,没有任何理由在OpenCL上花费更多时间和资源:)
P.S:我的论点可能有偏见,因为我们几乎所有的GPGPU都在CUDA上工作。我们有一个图像处理/计算机视觉库CUVI(用于视觉和成像的CUDA),它可以加速CUDA上的一些核心IP / CV功能。答案 8 :(得分:0)
Cuda当然比OpenCL更受欢迎,因为它在OpenCL发布前3或4年发布。自OpenCL发布以来,Nvidia对该语言的贡献不大,因为他们非常关注CUDA。他们甚至没有为任何驱动程序发布openCL 1.2版本。
就异构计算以及手持设备而言,OpenCl肯定会在不久的将来更受欢迎。截至目前,OpenCL的最大贡献者是AMD,它在他们的网站上可见。
答案 9 :(得分:-2)
根据我的经验:
如果您想获得最佳绝对性能,那么您需要查看谁在最新的硬件迭代中,并使用他们的堆栈(包括最新/测试版)。
如果您希望获得最佳性能,那么您将瞄准玩家卡而不是“专业”牌,并且针对不同平台的灵活性有利于opencl。
如果你刚开始,cuda往往更加精致,拥有更多的工具和库。