NVIDIA与AMD:GPGPU性能

我想听听有两种编码经验的人。 我自己,我只有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在772 MHz有512个执行单元。 6970在880 MHz有1536个执行单元。

AMD对于NVIDIA的纸张优势有多逼真,而且在大多数GPGPU任务中都可能实现? 整数任务会发生什么?

隐喻地说,与nvidia相比,ati有一个很好的引擎。 但是NVIDIA有更好的车:D

这主要是因为nvidia已经投入了大量资源(金钱和人力)来开发科学计算所需的重要图书馆(BLAS,FFT),然后再次推广它。 与ATI(或OpenCL)相比,这可能是CUDA在这里支配标签的原因,

至于在GPGPU任务中普遍实现的优点,最终将取决于其他问题(取决于应用程序),如内存传输带宽,一个好的编译器甚至是驱动程序。 nvidia有一个更成熟的编译器,在Linux上更稳定的驱动程序(linux因为它的用途在科学计算中被广泛使用),倾向于CUDA的平衡(至less现在)。


编辑 2013年1月12日

我做这个职位已经两年了,有时候似乎还能吸引观众。 所以我决定澄清一些事情

  • AMD已经加强了他们的游戏。 他们现在有BLAS和FFT库。 许多第三方库也在OpenCL周围出现。
  • 英特尔将Xeon Phi引入野外,支持OpenMP和OpenCL。 它也有能力使用现有的x86代码。 正如在评论中指出的那样,现在有限的x86没有SSE
  • NVIDIA和CUDA在图书馆范围内仍然占有优势。 不过,他们可能不像以前那样专注于OpenCL。

总之,OpenCL已经缩小了过去两年的差距。 这个领域有新的球员。 但CUDA仍然领先一步。

我对CUDA和OpenCL没有任何强烈的感受; 据推测OpenCL是长远的未来,只是凭借开放的标准。

但是现在的NVIDIA和ATI的GPGPU显卡(不是显卡性能,但GPGPU),我确实有强烈的意见。 为此,我将指出,在目前的500 强大型 群集列表中 ,NVIDIA将AMD 4系统引导至1,并在gpgpu.org上为NVIDIA提供search结果(论文,在线资源链接等)超过6:1的结果。

这种差异的很大一部分是可用的在线信息量。 查看NVIDIA CUDA Zone与AMD的GPGPU Developer Central 。 对于开发者而言,这些东西的数量甚至不足以进行比较。 在NVIDIA®(英伟达™)网站上,您可以find大量可能从事类似于您的问题的人员的论文 – 并提供了代码。 你会发现从NVIDIA和其他地方的在线课程吨,以及像开发人员的最佳实践指南等非常有用的文件。免费的开发工具 – 分析器,cuda-gdb等的可用性绝对倾斜NVIDIA的方式。

(编者:这一段中的信息已经不再准确了)。而且有些区别也是硬件的。 AMD的显卡在峰值触发方面有更好的规格,但是为了能够获得相当大的一部分,你不仅要把你的问题分解到许多完全独立的stream处理器上,而且每个工作项目也需要被vector化。 鉴于GPGPUing代码已经足够困难,那么额外的架构复杂性足以造成或破坏一些项目。

而所有这一切的结果是NVIDIA用户社区继续增长。 在我所知道的build立GPU集群的三四个组中,他们都没有认真考虑过AMD卡。 而这意味着更多的团队在NVIDIA方面写文章,贡献代码等等。

我不是NVIDIA公司的先生 我希望不是这样,GPGPU平台有两个(或更多)同样引人注目的。 比赛是好的。 也许AMD将很快加强游戏 – 即将到来的融合产品看起来非常引人注目。 但是在给某人build议今天购买哪张卡,以及现在在哪里花费时间进行努力的时候,我不能良心地说这两个开发环境同样好。

编辑补充 :我想在回答原始问题方面,上面有点椭圆,所以让我稍微说清楚一点。 你可以从一个硬件获得的性能,在一个理想的世界中,有着无限的可用时间,只依赖于底层硬件和编程语言的能力; 但实际上,您投入固定时间的性能数量也强烈依赖于开发工具,现有的社区代码库(例如公开可用的库等)。 这些考虑都强烈指向NVIDIA。

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

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

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

另一方面,NVIDIA的编译器在编译时进行较less的分析。 相反,NVIDIA拥有更先进的架构,他们在逻辑上花费了更多的晶体pipe,能够处理只在运行时出现的algorithm的dynamic行为。

我相信大多数使用GPU的超级计算机都是NVIDIA的,这是科学家有兴趣进行计算的问题types,一般来说比NVIDIA的架构更好地映射到NVIDIA的架构。

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

在这两种情况下,与CPU相比,速度都是〜10x-30x。

我没有testingCUDA,但是我怀疑它可以神奇地解决我的随机内存提取问题。 现在,CUDA和OpenCL差不多,我看到OpenCL比CUDA更有前途。 主要原因是英特尔正在为其处理器推出OpenCL驱动程序。 这将是一个巨大的进步(在CPU中运行16,32或64线程的OpenCL非常快速,并且真正容易移植到GPU)。

我是GPGPU新手,但是我有一些科学计算的经验(物理学博士)。 我正在组build一个研究小组,我想要使用GPGPU来进行计算。 我必须在可用的平台之间进行select。 我之所以selectNvidia,有两个原因:虽然ATI在论文上可能会更快,但是Nvidia拥有更成熟的平台和更多的文档,所以在这个平台上可以更加接近最佳性能。

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

我听说OpenCL的一点是,它试图立刻成为一切,确实OpenCL代码将更具可移植性,但也有可能不利用任何平台的全部function。 我宁愿学习更多,编写更好地利用资源的程序。 随着今年刚刚推出的TESLA K10,Nvidia处于4.5 TeraFlops范围,所以目前还不清楚Nvidia是否落后…但是英特尔中等收入国家可能被certificate是一个真正的竞争对手,特别是如果他们成功地将GPGPU部门迁移到主板。 但是现在,我select了Nvidia。

在Fermi和Kepler开了几年CUDA之后,我花了一些时间和OpenCL开发GCN卡,但是我仍然更喜欢CUDA作为一种编程语言,如果我有一个select,我会selectAMD硬件和CUDA。

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

对于AMD:

  • 即使Maxwell,NVidia仍然有更长的命令等待时间,而且复杂的algorithm在AMD(假设理论上相同的Tflops)经过简单的优化后可能会更快。 开普勒VS GCN的差距达到了60%。 从这个意义上来说,优化NVidia的复杂内核很困难。

  • 便宜的卡片。

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

对于Nvidia:

  • 具有适合可靠的高服务器负载的Tesla系列硬件。

  • 新的麦克斯韦更节能。

  • 编译器和工具更先进。 AMD仍然无法实现maxregcout参数,所以你可以很容易地控制各种硬件的占用情况,他们的编译器有很多关于什么是每个版本都会改​​变的最佳代码的随机概念,所以你可能需要每隔一段时间重新访问旧代码因为它突然变慢了40%。

此时,如果GPGPU是您的目标,那么CUDA是唯一的select,因为opencL与AMD还没有准备好用于服务器群,而且由于编译器似乎总是处于“testing阶段”,因此编写高效代码非常困难。 。

我在评估OpenCL浮点性能方面的经验倾向于支持NVIDIA显卡。 我已经在从8600M GT到GTX 460的NVIDIA显卡上使用了几个浮点基准testing。在这些基准testing中,NVIDIA显卡一直达到理论上单精度峰值的一半左右。
我曾经使用过的ATI卡很less能达到比单精度峰值高三分之一的效果。 请注意,我在ATI的经验是歪曲的; 我只能使用一个5000系列卡。 我的经验主要是HD 4000系列卡,从来没有得到很好的支持。 支持HD 5000系列卡要好得多。

我想补充一下。 对于我们的软件业务,我们可以将原始的单精度性能转化为生产力,但即使这样我也不必妥协,因为正如您已经指出的那样,您无法在使用OpenCL的ATI硬件上实现尽可能多的性能如果你在NVIDIA的硬件上写CUDA。

是的,在PGI宣布CUDA的x86编译器的情况下,没有任何理由花费更多时间和资源在OpenCL中编写代码:)

PS:我们的观点可能会有偏差,因为我们几乎所有的GPGPU都在CUDA上工作。 我们有一个image processing/计算机视觉库CUVI(视觉和成像CUDA),可以加速CUDA上的一些核心IP / CVfunction。

到目前为止,Cuda当然比OpenCL更受欢迎,因为它在OpenCL之前的3到4年前就已经发布了。 由于OpenCL已经发布,Nvidia并没有为这个语言贡献很多,因为他们专注于CUDA。 他们甚至没有发布任何驱动程序的openCL 1.2版本。

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

在我的经验中:

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

  • 如果你想要最好的性能为钱,你将瞄准玩家卡,而不是“专业”的卡和灵活性的目标不同平台倾向opencl。

  • 如果你刚开始,特别是cuda往往更加精美,有更多的工具和图书馆。

最后,我个人认为,从nvidia(我们得到了一个死的特斯拉,并没有改变几个月,而一个客户正在等待)的“支持”令人震惊:以opencl跳船的灵活性是值得的性能稍低当NVIDIA在发布周期中领先。

Interesting Posts