通用计算核动力:OpenCL技术解析
技术空间
随着显卡GPU的计算能力增强,它的工作范围已经不仅局限于固有图形处理方面,它也可以像CPU那样被更为广泛地应用在科学计算领域,由此通用计算的应用逐渐升温。包含多核心的CPU、多个流处理单元的GPU,OpenCL(Open Computing Language,开放式计算语言)将它们统一起来并行工作,这不但可以得到更强的计算能力,而且它将让硬件之间隔阂减小,通用计算应用得到普及。
一、后起之秀,OpenCL推出的重要意义
继OpenGL和OpenAL(Open Audio Library)之后,标准组织Khronos Group在2008年11月发布了通用计算标准第一版OpenCL 1.0,并公开提供了规范全文和相关资源的下载、使用,引起了业界的广泛关注。为什么要推出OpenCL这样的标准呢?或在有了DirectX、OpenGL这样的标准之后,推出OpenCL有何意义和用处呢?这是很多读者包括业内人士为此感到困惑和迷惘的问题。
这还得从API特点说起,API是什么呢?API(Application Programming Interface,应用程序编程接口)是能用来操纵硬件、应用程序或者操作系统的一组函数,是一套用来控制操作系统的各个部件的外观和行为的一套预先定义的函数。每种API都可以让开发者访问最新的硬件特征,不需要应用程序直接与硬件关联,大大减少了程序和硬件的不兼容状况,而且还可以加快软件开发和推向市场的速度。OpenCL是一种新兴的通用并行计算领域的API。
在多媒体及3D图形领域已有较成熟的API:DirectX和OpenGL,但在新兴的通用并行计算领域这还是个空白。自从AMD提出GPGPU(General Purpose Computation on GPU,通用GPU)理论之后,在大规模并行计算领域,Intel、AMD、NVIDIA、IBM等厂家都纷纷推出了自己的通用并行计算平台或理论,并为此展开了激烈的竞争,业界在此领域可以说是标准和概念林立,A公司有A公司的标准,B厂家有B厂家的套件,C企业也有自己的开发插件……
这无疑将大大加大程序或软件开发者适应不同厂家硬件的难度,并大大提高软件开发工作量。道理很简单,例如我们利用B公司的并行计算平台开发了一款全高清视频软件,它在B公司的硬件平台上应用很流畅,但在使用有A或C公司的硬件的电脑平台上却解压不流畅,甚至出现程序错误或死机等现象。那么,纵使这款软件很优秀,但它的用户数量也不会很多。在没有合适的API之前,要解决这个问题的办法只有依次为ABC三个公司的硬件都开发定制对应的软件。
这肯定将让从业者或消费者感到无所适从,该支持谁、选择谁、使用谁……怎一个“乱”字了得。这也不是所有开发者,乃至都还不能一统天下的硬件厂商愿看到的。在这种情形下,可以说OpenCL的推出是势在必行,甚至可以说是迫在眉睫。OpenCL将一举结束业界在通用并行计算领域各自为政的乱战状态。

二、拨云见日,OpenCL的主要特点
作为第一种应用于通用并行计算领域的API,跨平台的OpenCL注定具有开拓性的意义。虽然本报读者及电脑使用者大多非通用并行计算的直接需求者或使用者,但适当了解OpenCL对了解最新的电脑软硬件技术将大有裨益。OpenCL有哪些技术特点呢?
◆全免费开放行业标准
OpenCL是一个开放且免授权费的跨平台程序语言标准,专为目前个人电脑、服务器,以及手持和嵌入式设备的并行处理所设计。它是第一款面向GPU及CPU系统的,以通用并行计算编程为目标的统一的开放式免费标准。
◆具备全能平台适应力
作为一款开放式的API,与CUDA这样的“半开放式(对竞争对手的硬件不开放)”架构不同,OpenCL最大的技术特点就是它是一款全包容的应用程序编程接口,不依赖于特定的硬件或者操作系统。
它不仅兼容各硬件厂商的CPU(多核心处理器)、GPU/VPU(图形处理器)、DSP(数字信号处理器)及Cell(Cell是IBM与东芝、索尼共同研发的多功能平行架构处理器,它主要被用在索尼PS3游戏机、IBM电脑工作站、东芝数字电视中)处理器,也兼容全部的主流操作系统,便于软件开发者为高性能计算服务器、桌面计算系统、移动便携设备编写高效精简的代码,在游戏、娱乐、科研、医疗等各种领域都有广阔的应用前景。
◆具备很好的互操作性
如前文所述,一台异构电脑很可能会采用A公司的并行处理器、B公司的GPU、C公司的DSP,如果没有OpenCL这样的API,那么软件开发者不得不为此编写大量的ABC三公司不同类型处理器的应用程序及兼容通信程序。而有了OpenCL,软件开发者都统一按OpenCL标准编写程序,不需要再专门编写不同处理器的架构专用程序,这肯定将大大提高软件对硬件的兼容性,加强软件对硬件选择的自由度。
同时,OpenCL具备很好的互操作性,OpenCL可统一管理一台电脑上包含CPU、GPU、DSP在内的各类处理器,可以让GPU与CPU处理或交叉处理同一个编码或不同代码,从而可更充分地整合硬件厂商的CPU、GPU、DSP芯片的能力,让硬件厂商可以专注开发性能更优的处理器,而不是过度专注于处理接口优化及兼容性之类的问题。
◆支持异构处理器系统
从多核处理器的发展规律来看,它已走进了死胡同,集成处理器数目再在目前高端多核处理器上倍增的可能性几乎没有,而异构处理器(将不同类型的CPU、GPU或DSP内核集成在一起)已成为这种技术不断发展的必要选择。无论是AMD并购ATI、NVIDIA提出的GPU整合CPU功能,还是Intel提出的CPU集成GPU,都可以看作这是一种发展趋势。在这种架构中,CPU内核所不擅长的浮点运算及信号处理工作,将由集成在同一块芯片上的其他可编程内核执行。而在OpenCL 1.0版本中,它已明确提供有“适用于各种类型异构处理器的坐标数据和基于任务并行计算API”,有望为未来异构处理器的普及清除第一道障碍。
◆具备较好的易用性
OpenCL 1.0除了包含一个并行计算API和一种针对此类计算的编程语言外,还包含有C99编程语言并行扩展子集、基于IEEE 754标准的数字条件等特性。对于开发者来说使用OpenCL有一个好处,它是基于他们所熟悉的C语言。在语言扩展方面它是ISO C99的一个分支,对数据类型和数值精度有着严格定义。而且针对嵌入设备的OpenCL则简化了对数据精度的定义。
除此之外,OpenCL还具备较好的互兼容性,它可与OpenGL、OpenGL ES(OpenGL for Embedded Systems,是OpenGL的子集,主要针对手机、PDA和游戏主机等嵌入式设备)和其他图形类API高效互通。

三、号角吹响,厂商对OpenCL的支持状况
从筹备到推出,OpenCL得到了业界重量级厂商的广泛支持。OpenCL工作组的主要成员包括苹果、NVIDIA、AMD、Intel、ARM、飞思卡尔、IBM、诺基亚、摩托罗拉、德州仪器等业界老大在内的26家软硬件企业。其中苹果是该标准最早的推动者,并且苹果也可能是OpenCL技术最早的应用者之一,它将率先在Mac OS X Snow Leopard中采用GPU并行计算技术,推动嵌入式图形和视频加速技术进入该公司的未来手持设备产品,这意味着未来的iPhone将会应用OpenCL技术。
而在桌面计算领域,NVIDIA、AMD等主要厂商都在第一时间响应了对OpenCL地支持。作为OpenCL的主导厂商和研究平台提供者,NVIDIA表示,OpenCL和它日渐成熟的CUDA并不冲突, CUDA将完美支持OpenCL,实现强强结合。而AMD也随即宣布采纳OpenCL标准,并将它加入Stream通用计算架构中。它将在ATI Stream SDK开发包中,继续改进Brook+工具,加入支持OpenCL 1.0标准的编译器和Runtime运行组件。并且AMD指出,“随着OpenCL 1.0的推出,开发人员终于有了一个更好的开放性选择”。
在各大厂家为此吹响号角的同时,一个重要的厂商此时的动态相信大家也倍加关注,那就是Microsoft微软。微软没有参与OpenCL的制定工作,可以肯定的是Windows 7至少在先期不会对OpenCL提供支持,这对于OpenCL的推广者来说应是预料之中的事。同OpenGL、OpenCL这类“单纯”的API不同,微软主推的DirectX是一系列多媒体API的组合,它不仅含有专门针对Direct3D(3D图形)的API,也包含有DirectSound、DirectInput、DirectPlay、DirectShow这样的面向不同应用层面的API。
所以,也就不难理解微软将在它最新的DirectX 11中继续整合类似的Computer Shader技术来与OpenCL再决雌雄的决心。而对于多数硬件和软件厂商来说,对此是持欢迎态度的,毕竟,竞争才能促进业界在此方面能更好的发展,多一种开放性标准也意味着多一种选择。

四、结语
OpenCL无论对开发人员、整个业界还是对消费者来说都是一款绝佳的应用程序接口,它真正吹响了通用并行计算应用的号角。
作为一种跨平台的开放标准,OpenCL也让NVIDIA、Intel、AMD、IBM等厂家在通用并行计算领域重新站在了同一起跑线上。术业有专攻,该标准将激发软件开发者在并行计算软件方面的开发热情。未来各大硬件厂商也将由此更关注自身硬件的性能与适用性,因为只有这样的产品才能在OpenCL又一次引发的通用并行计算的浪潮中立于不败之地。(均儿)
