OpenCL(全称Open Computing Language,开放运算语言)是第一个面向异构系统通用目的并行编程的开放式、免费标准,也是一个统一的编程环境,便于软件开发人员为高性能计算服务器、
桌面计算系统、手持设备编写高效轻便的代码,而且广泛适用于多核心处理器(CPU)、图形处理器(GPU)、Cell类型架构以及
数字信号处理器(DSP)等其他并行处理器,在游戏、娱乐、科研、医疗等各种领域都有广阔的发展前景。
OpenCL工作组成员
OpenCL工作组的成员包括:3Dlabs、AMD、
苹果、ARM、Codeplay、爱立信、飞思卡尔、Graphic Remedy、IBM、Imagination Technologies、Intel、诺基亚、NVIDIA、摩托罗拉、QNX、高通,三星、Seaweed、德州仪器和
瑞典Ume大学等。
像Intel、NVIDIA和AMD都是这个标准的支持者,不过
微软并不在其列。
历史
2008年6月的WWDC大会上,苹果提出了
OpenCL规范,旨在提供一个
通用的开放API,在此基础上开发GPU通用计算
软件。随后,Khronos Group宣布成立GPU通用计算开放行业标准工作组,以苹果的提案为基础创立OpenCL行业规范。
仅仅半年后,标准就已经完工。Khronos工作组
总裁,NVIDIA副总裁NeilTrevett对OpenCL的定稿速度相当自豪:“如果你去看看其他的大型行业标准,制定过程花上5年都是相当普遍的事情。要把这一过程缩短到18个月都相当困难,我们之前的纪录是12个月。但这一次,我们只用了6个月。”
如此赶工的目的正是为了赶上Mac OS X 10.6 Snow Leopard的发布日程。Intel公司TimMattson在发布会上表示:“当时情况就是这样,如果我们能够赶上苹果这个近乎不可能实现的时间表,就能够得到SnowLeopard的支持,那对我们将是一个巨大的推动。为了实现这个目标,我忙得都快离婚了,每周两次电话会议,面对面会议不计其数,我都不知道我在这活上花了多少个小时了。我已经精疲力竭,都快挂了。在最初的会议上,我就是那个认为这个时间不可能达成的人。但是我错了,我们办到了,而且标准定义的相当完整。对此我相当自豪。”
发布会上,Neil Trevett、Tim Mattson以及来自AMD公司的BenGaster都进行了演讲,展示了OpenCL的功能和代码范例,但并没有对该API的具体实现进行演示。因为目前该标准正在工作组各成员企业的法律顾问手中进行检查,确保不会触及公司的知识产权或专利。30天的法律问题考察期结束后,各成员将最终签字令标准生效。届时OpenCL标准的具体规格和Demo演示就将公开。而随着明年Snow Leopard的发布,OpenCL也将正式进入实用。
Neil Trevett表示,如果苹果将OpenCL嵌入SnowLeopard的工作能够顺利完成,
图像处理、视频处理软件商将迎来巨大的商机:“每台Mac中都封禁了一台超级计算机,只是很难将其释放出来。OpenCL就将解放GPU强悍的运算能力。”除此之外,OpenCL还将在GPU物理加速等领域施展拳脚。更重要的是,它并不限制底层硬件。无论NVIDIA还是AMD显卡,在Snow
Leopard下都能使用同样的代码实现通用计算,未来甚至iPhone等掌上设备也有可能实现支持。
OpenCL支持现状
2009年6月NVIDIA首家发布了支持OpenCL 1.0通用计算规范的驱动程序,支持Windows和
Linux操作系统。
2009年8月初AMD首次发布了可支持X86处理器的OpenCL SDK——ATI Stream SDK v2.0Beta,立即交由业界标准组织KHRONOS进行审核。
使用OpenCL
目前,NVIDIA显卡对OpenCL技术支持得比较到位,所以这里仅用NVIDIA的Geforce(精视)系列显卡作解释。
中国用户可以登录英伟达中文官方网站上下载到最新的驱动程序,只要您下载的驱动是195.62版本或更高,就可以在Geforce(精视)8系列或更高级的显卡中开启OpenCL,在安装好新版本的显卡驱动程序并重新启动后,OpenCL就自动开启了。当有需要使用CPU来完成的工作如转换视频时,GPU就会帮助CPU进行运算,以提高转换速度。但是在3D游戏中应该是不会调用OpenCL的,因为显卡有自己的硬件加速功能以及物理引擎,所以Geforce(精视)8系列及以上的显卡就不需要CPU辅助进行渲染了。这时候,您就可以一边玩游戏,一边进行消耗CPU的工作了。
当然同样,在NVIDIA的Quadro系列专业显卡中,同样能够使用OpenCL技术。只要您的显卡能够达到CUDA的要求,就能够正常使用OpenCL,以获得优异的CPU运算效率。
在AMD-ATI的Stream技术中,已经为日常使用、办公、游戏等提供物理加速。原理与OpenCL基本相同,但是,目前AMD-ATI还没有进行推广,但是官方承诺,在日后会逐渐增多Stream支持的游戏。但是Stream使用的显卡平台还是比较高,而性能非常优异的显卡无疑带来更高昂的价格,我们也同样希望AMD能够做到像NVIDIA那样,只需要支持DirectX10的显卡就能开启OpenCL(Geforce 8系列显卡基本能完美支持DirectX10,所以官方将开启OpenCL的显卡最低定为8系列),以方便更多的AMD-ATI用户。
OpenCL 1.0
OpenCL 1.0主要由一个并行计算API和一种针对此类计算的编程语言组成,此外还特别定义了:
1、C99编程语言并行扩展子集;
2、适用于各种类型异构处理器的坐标数据和基于任务并行计算API;
3、基于IEEE 754标准的数字条件;
4、与OpenGL、OpenGL ES和其他图形类API高效互通。
OpenCL 1.1
Khronos Group2010年6月15日宣布,OpenCL通用计算标准的1.1版本已经发放,开发者可以免费
下载,并依照新标准开始进行编程。
OpenCL 1.1标准向下兼容1.0版,提供了更多的新功能,并对性能进行了改善。主要新特性包括:
- 支持新数据类型,如3维适量和新增图像格式。
- 支持处理多Host指令以及跨设备Buffer处理。
- Buffer区域操作,包括对1D、2D、3D三角形区域的读、写和拷贝操作。
- 改进驱动和控制指令执行的事件应用。
- 增加OpenCL内建C功能。
- 通过链接OpenCL和OpenGL事件,高效共享图像和Buffer,改进与OpenGL的互操作性。
OpenCL标准由Khronos Group的OpenCL工作组制定,完全开放,任何开发者都可免费使用。OpenCL工作组成员包括(英文首字母排序):3DLABS、动视暴雪、AMD、苹果、ARM、Broadcom、CodePlay、EA、爱立信、飞思卡尔、富士通、通用电气、Graphic Remedy、HI、IBM、Intel、Imagination Technologies、
美国Los
Alamos国家实验室、摩托罗拉、Movidia、诺基亚、NVIDIA、Petapath、QNX、高通、RapidMind、三星、Seaweed、S3、意法半导体、Takumi、德州仪器、东芝和Vivante。
目前,NVIDIA已经表示将首家提供对OpenCL 1.1标准的支持,很快就会推出支持新标准的NVIDIA GPU通用计算驱动程序。