作为GPU计算的两个主要的编程框架,OpenCL和CUDA在开发者社区里已竞争多年。直到最近,CUDA已经吸引了很多开发者的关注,尤其是在高性能计算领域。但OpenCL软件现已成熟到让HPC从业者也开始另眼相看。

    OpenCL和CUDA都是提供数据并行通用模型以及底层访问硬件,但只有  OpenCL提供了一个开放的、行业标准的框架。正因为如此,它已经引起了几乎所有的处理器厂商,包括AMD,英特尔和NVIDIA,以及其他服务于移动和嵌入式计算厂商的支持。因此,用OpenCL开发的应用可以方便地跨越各种GPU和CPU设备。

    2008年12月发布OpenCL 1.0,虽然只比NVIDIA推出的第一个版本的CUDA晚了1年半,但在普及性上,OpenCL仍旧大幅落后CUDA,尤其是在HPC领域。这主要是由于NVIDIA在这一领域努力推动CUDA 成为主导GPU开发编程框架的结果。

    AMD一直是OpenCL技术在计算技术最强烈的助推器,但它缺乏在高端GPU计算方面有竞争力的产品。OpenCL的使用迄今为止,已大多转移到客户端计算,尤其是那些越来越多地将GPU硅纳入其设计的移动平台厂商。

    OpenCL对于HPC用户来说一直保持着不够成熟的印象,相对CUDA技术,性能低。这也可能是高性能的芯片制造商(英特尔,AMD和NVIDIA)没有热烈地支持,至少在他们的高端处理器上。在许多方面,确实是这样,NVIDIA致力于其最关注自己的CUDA软件,而英特尔似乎已经解决自身的并行编程框架,主要是Cilk Plus和线程构建模块。

不过AMD继续推崇OpenCL,他们在最新的编译器和库版本上大大提高性能。事实上,来自于未来集团(位于美国橡树岭国家实验室内)的 Kyle Spafford已经对这两种技术做了一段时间的基准测试,他认为OpenCL的性能现在可以与CUDA看齐。 

Spafford运行橡树岭国家实验室的可扩展异构计算基准套件(SHOC),它已为CUDA和OpenCL做好了优化。Spafford发现OpenCL在大多数基础数学内核上,性能已经与CUDA相匹配。他还发现,OpenCL的一些内核的性能,像SGEMM,自2009年以来增加了10倍。CUDA在一个代码上具有显着的性能优势就是快速傅立叶变换(FFT)。spafford 认为CUDA具有更好的FFT性能是因为它使用一个快速的内在属性,而AMD的OpenCL用的速度较慢但更精确的方式。Spafford说,如果执行匹配的话,性能上的差异就会消失。

别人也在各自独立的科学应用上得出类似的结论。在Dartmouth的一个研究小组分别用OpenCL和CUDA运行引力波的数值模型,他们发现OpenCL和CUDA之间的相似的性能,他们用的是Tesla GPU和IBM的Cell BE处理器。 

GPU的软件制造商AccelerEyes已经看到CUDA和OpenCL性能均衡。该公司最近发布了他们的两个旗舰软件产品ArrayFireJacket的OpenCL驱动的beta版本。AccelerEyes已经发现在很多内核代码上,这两种技术表现出相似的性能。还有如橡树岭国家实验室,他们发现在CUDA上执行FFT的速度依旧更快,但AMD的OpenCL的编译器和库,无论在广度和性能上都大大提高。 

据AccelerEyes首席执行官约翰Melonakos表示超过一半的客户用他们的电脑开发GPU加速程序,然后再部署到工作站或GPU集群上,因此能够支持非NVIDIA硬件是非常必要的。例如,客户作为开发平台使用的MacBook不能运行CUDA,因为苹果有没有在其最新的笔记本电脑里选择NVIDIA GPU。但是AccelerEyes提供AMD的OpenCL库,可以使用英特尔CPU、AMD的CPU和NVIDIA GPU,没有硬件不兼容的问题。 

还有的用户只是不愿意采用供应商特定的软件栈,如CUDA。“有一类的人绝对要用到GPU计算的,但他们拒绝被供应商绑死。”Melonakos说,“这些人会将OpenCL产品最为首选。” 

为了对付这种感知,NVIDIA最近为第三方开发开放了CUDA编译器的源代码。但很明显,NVIDIA公司不把其所有重要的CUDA数学库,像CUBLAS和CUFFT,列入开放的列表里。据Melonakos,大型和成熟的库集是CUDA的技术计算领域的真正原因。不管开源与否,NVIDIA仍保留控制CUDA软件技术,这就是为什么它仍然认为作为一个供应商特定的解决方案。 

即使是NVIDIA和英特尔都在OpenCL下了赌注,但双方还是为各自的硬件提供软件。在这一点上,这些公司在移动计算开发者提供OpenCL支持。但是,因为有越来越多的移动和HPC有交叉的用户,还不明确开发者将如何使用这些技术。 

事实上,如果移动领域在更大范围里紧抓OpenCL,并且它成为标准低层次异构计算解决方案,将有助于加快其在高端领域里的普及。而一旦OpenCL有一定的普及度,对强健编译器和库的需求会迅速增加。正如Melonakos所说:“我不认为OpenCL是要走了。”