要使用GPU计算,就避不开CUDA与OpenCL这两个最底层接口的调用,二者之间的关系就如同当年微软的Windows操作系统与所谓UNIX开放系统的对峙情势一般,最后由于Windows普及率、便利性以及成熟的开发生态链,取得绝对领先优势,而UNIX虽称为Open System开放系统,但由于IBM、HP、Sun等大厂的私心作祟,使得一个原本非常优异的开放标准逐步走向封闭的死胡同。如今,NVIDIA专属的CUDA与号称开放的OpenCL之争,会不会旧戏重演、重蹈复撤?

事实上对于绝大部分的应用开发单位与技术人员来说,“开放”的道路总是更受欢迎的,一则开发资源更为丰富,二则市场机会更加庞大,就像过去几年Android平台走开放路子,市场占比瞬间就超过封闭的iOS平台,是类似的道理。如今我们重新检视一下CUDA与OpenCL之间的发展轨迹,并且评估一下未来的发展趋势。

自从Apple在2008年发布OpenCL标准至今六年的时间,已经获得包括Intel、AMD、NVIDIA、三星、高通、ARM等二十多家硬件大厂的支持与参与,同年11月发布OpenCL 1.0规范、2010年6月发布1.1标准、2011年11月发布1.2标准,到2013年下半年才发布最新2.0规范。反观NVIDIA从2008年发布CUDA 1.3版,历经六年时间已经更新到6.0版,几乎每年都有过大改版,更新速度非常惊人,也代表NVIDIA在CUDA上的积极态度。

然而经过几年的发展,CUDA如此快速更新的脚步,也引起许多开发人员的强烈质疑,虽然NVIDIA不断宣称可以“反向兼容”,但绝大部分开发人员所经历的,都是每次改版都造成代码上不同幅度的变动、重新测试的过程,产生非常大的隐形成本,这是版本更行过快所导致的负面影响。反观OpenCL历经五年时间才有一次大版本升级,对于开发人员来说是比较舒服的。

过去GPU计算偏重在纯科研领域的阶段,此时CUDA独善其身的方式能得到更多技术人员的青睐,再加上OpenACC编程模型对CUDA C/Fortran高度支持的推波助澜,使得CUDA能在科研计算大放异彩,特别是石油、生化这类独立计算应用就非常适合。

但是走向商业应用的时候,特别在安防视频监控、身份识别以及物联网大数据等高速计算应用的正好过程,与摄像头、传感器甚至移动设备等周边仪器进行更紧密接轨,就成为整个应用链中很关键的环扣。OpenCL在这部分就比CUDA强很多,因为OpenCL标准横跨Intel CPU、AMD CPU、ARM CPU、FPGA以及众多移动设备、视频采集设备,对于应用延伸性有巨大的商业价值。反观NVIDIA CUDA在这方面就非常缺乏,这是一个致命硬伤!

从编程人员的角度来看,不管是CUDA或OpenCL都属于“硬件关联”的底层API调用,其艰涩程度对于非计算机专业的开发人员来说是相当辛苦的,所幸在2011年底发布的OpenACC增量导语编程模型为GPU编程提供一种非高效简便的开发途径,甚至可以忽略CUDA或OpenCL的知识,特别对Fortran用户来说是一大福音。

OpenACC 2.0规范已经扩大支持范围,目前也开始支持OpenCL与ARM,对于过去完全与Fortran用户绝缘的AMD GPU来说是一个非常大的突破,对于Fortran用户来说,更可以透过OpenCL标准将其应用移植到更多硬件平台上,瞬间提升商业价值。

此外,日前美国一个商业单位推出“Hadoop在OpenCL”的编译器,为大数据应用提供在GPU上执行的接口,更进一步扩大OpenCL的商业价值。两年前一个学术单位的CU2CL(将CUDA源代码转成OpenCL代码)项目,也为现有CUDA用户提供一个简易的转换工具,加上微软逐渐发力的C++AMP编程模型、ArrayFire GPU商用函数库、OpenCV开源函数库以及越来越多的开发资源都增加对OpenCL的支持力度。

GPU高性能应用已经从先前“NVIDIA+CUDA”一家独大走向多家齐鸣的格局!然而从长远发展的角度来看,NVIDIA也是OpenCL成员,其GPU也支持OpenCL标准,也不会在OpenCL复苏过程中缺席,但CUDA应用是否仍然像过去五年的高度增长?还要看未来各大厂商的市场布局而定!【GW】