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在发布周期中领先。