没有人否认现在是信息爆炸的时代,每天这个世界上都会新增数以TB计的新数据。
我们日常生活中需要处理的数据也日益增长,从以前640MB的CD/VCD,到4.7GB的DVD影碟,再到现在高达50GB的蓝光高清电影,你是否感觉到数据处理时的压力了呢?
没错,海量的数据带来了各式各样数据处理的需求,网络浏览、平面或者3D图形加速、数据服务器、分布式云计算等等,而现在各计算平台之间的兼容性却不容乐观,举几个明显的例子:
◆我们使用双核处理器的计算机已经快有5个年头了,但为数众多的应用软件到目前为止仍不能支持双核CPU,就算能够支持双核,在未来面对四核、八核或更多核心的处理器时又要重新开发;
◆运算能力已经超过1 TFlops的高端3D图形处理器只能用来对付3D游戏,其它时候它的作用更像是一块“电热片”;
◆游戏软件开发商在发布一款新游戏的时候,往往会推出PC、PS3、XBox360、Wii、PSP、
NDSL等多个平台的版本,其中的翻译和移植工作就占去了开发组大部分时间……
所有的一切都是因为平台的差异造成的,也正因为这种差异的存在,严重降低了软件在各个平台之间移植和运行的效率,那有没有一种办法可以让大家心平气和地坐在一起,“求同存异”,一起来协商解决这个问题呢?这就是我们今天要给大家介绍的OpenCL,开放式通用计算标准。
其实业界在几年前就已经开始关注这个领域,不过那时的解决方案都是“各扫自家门前雪”,并没有达成一个共识。早先斯坦福大学牵头,推出了利用GPU以及PS3进行的Folding@HOME蛋白质计算项目;此后Adobe公司推出了新版本的Acrobat,可以利用GPU达到加速PDF文档载入和处理的效果;近期,AMD与NVIDIA公司也纷纷拿出自己的视频编码程序Avivo Video Converter与
Badaboom,利用GPU的加速能力来进行视频编码运算。
用GPU为蛋白质分子计算加速
就连大名鼎鼎的NVIDIA CUDA,虽然在业界广受好评,但是也只能用在NVIDIA自家的GPU上面。为了避免未来的通用计算领域发展成各自为政、诸侯割据的混乱局面,现在必须要建立一个立足于通用计算的行业标准,在这个大背景下,OpenCL诞生了。
OpenCL是Open Computing Language,即开放计算语言的缩写。设立OpenCL的目的就是为日益庞大的并行计算市场提供一个开放的、免费的工业标准。在关于OpenCL的标准说明中,组委会特别提到了一个单词——“heterogeneous”,这个单词本身就有“不同种类的、异类的”的含义,这也暗示了OpenCL将建立在不同的处理器架构上,比方说x86 CPU、GPU、Cell处理器乃至于ARM构架的DSP处理芯片等等。OpenCL涵盖的范围非常广,如3D、图形图像处理、数据压缩/解压缩、数据库处理等完全不同种类的应用。
OpenCL想成为各种处理器应用的一个交集
难以想象的是,提出OpenCL倡议的竟然是大名鼎鼎且以封闭著称的Apple公司。2008年初,拥用强大软件研发能力的Apple公司私下向另外几位CPU、GPU的大佬们介绍了OpenCL的概念,并获得了广泛支持,初步组建了Op e nCL的圆桌会议。此后,在2008年6月,Ap ple公司将OpenCL草案移交给Khronos标准化组织,并且宣布Apple将在2009年发布的Snow Leopard新一代操作系统中加入OpenCL的支持。
已经宣布支持OpenCL的IT公司
正因为Apple等诸多大公司的支持,OpenCL从项目立项到去年12月份发布1.0标准,之间仅用了6个月的时间,真是兵贵神速;而且目前宣称支持OpenCL,并参与其中的成员几乎涵盖了全球主要的处理器、计算芯片供应商,声势非常浩大!不过现在摆在大家面前的难题是,不光计算机中各个部件的用途广泛,设计各异,连手机DSP处理器都要被涵盖在内,大家如何做到真正意义上的通用计算呢?
为了保证通用计算,OpenCL从五个方面进行了规定,这其中既有硬件平台,也同样包含有软件平台。
首先,OpenCL能够调用系统内全部计算资源,也就是说无论是CPU、GPU,还是今后额外加入的协处理器,全部都能够在公共计算平台上得到调用。今后用户在使用基于OpenCL标准编写的程序时,再也不会出现CPU占用率100%,而GPU占用率仅有1%这样的不平衡现象了。
在此基础上,OpenCL还要加快运算速度并提高运算效率,这个特点有点类似与现在的分布式计算(也称为“云计算”) ——不同的地方在于,云计算将庞大的运算任务分拆为很多小份,然后分配给互联网上的各台计算机;而OpenCL要做的事情是将电脑中的一个或者多个运行程序按运算量,平衡分配给系统中的各个运算部分。
OpenCL将系统中的存储器抽象成一个全局内存模型,例如我们使用的计算机有4GB内存、
1GB显存,但在OpenCL看来就是一个5GB存储器整体。
不光是PC系统,对于嵌入式设备中常见的ARM、DSP、MIPS等处理核心,OpenCL也能够提供良好支持。更令人激动的是,如果嵌入式处理器中集成有支持OpenCL规范的3D、视频加速模块,这些模块将扮演与ARM协处理器类似的角色,进一步加强系统性能。
为了达到各种处理器平台的集中调用,OpenCL会将系统中各个处理器或者处理核心看作一个个的处理单元。每个处理单元既能够自行处理数据,又可以通过OpenCL内核进行相互交流、提高工作效率。换句话讲,程序员在写程序的时候面向的是OpenCL内核,他不用去管这个程序需要调用CPU,又或者调用GPU,将这些事情甩给OpenCL内核去完成就可以了。
Khronos旗下的合作伙伴群
比起其它诸如VESA(显示器标准制定者)、JEDEC(内存标准制定者)来说,成立于2000年的“
Khronos”这个名字一直默默无闻,很多人甚至不知道它是做什么的。但如果说到OpenGL(图形)、
OpenAL(音效)等和计算机硬件加速息息相关的API,名气就要大很多了,其实这些都出自Khronos旗下。换句话说,几乎所有的电脑和数码厂商都是Khronos的成员。如现在的Apple和Google。
对计算机编程有所了解的人都知道,现在的计算机语言种类繁多,基础的机器语言生涩难懂,所以程序员们多使用高级语言。在高级语言中,又以C语言用途广、历史也非常悠久,无论是微软的C++语言,又或者NVIDIA的CUDA API都基于C语言架构体系。因此OpenCL也将C语言作为并行程序模型的基础,这样能够让广大程序员轻松上手,并加快OpenCL程序的研发速度以及保证可移植性。
OpenCL能否打开市场的关键因素就是能否实现与现有软件资源的对接,并迅速推出新的软件。举个明显的例子,能从OpenCL中获益大的当属GPU通用计算程序,一直以来GPU硬件的发展和OpenGL(及其它3D的API,如Di rectX)都是相辅相成的;因此,OpenGL虽然只是面向3D处理领域的程序接口,但其调用GPU资源的能力和效率是毋庸置疑的。在此基础之上,OpenCL在制定具体规范时,就可以充分利用OpenGL现有的一些特点,“依葫芦画瓢”,从而能够以更快的速度和更高的效率来完成GPU的通用计算程序。
正如文章开始时所说的那样,现在游戏开发商往往要针对多个平台开发同一款游戏。这样一来,参与开发的程序员就要吃透每一种硬件平台的结构和开发特性,这样才能做出发挥该平台特点的游戏产品。毫无疑问地说,这是一个痛苦的过程,不仅要极大提高游戏开发的成本,也会因为开发周期过长而失去市场先机,更严重的时候如果移植不成功,还会造成游戏性下降直接影响玩家的口碑。很多在游戏主机上非常吃香的游戏大作,移植到PC平台上其惨淡的“票房”就足以说明问题的严重性。反观PC平台上的游戏,高配置的PC能够在高分辨率的情况下,特效全开运行游戏,而配置较低的PC则可以通过适当降低分辨率以及游戏特效也能够玩游戏。
OpenCL就很好地考虑到这点,在未来融入OpenCL设计的游戏将大大提高其跨平台时的兼容性,不仅要在PC、游戏主机、服务器这样的大块头上实现通用,还要向下囊括掌上设备以及嵌入式平台,即各种便携游戏机、智能手机等等。我们可以设想一下,未来的程序开发人员只需要编写一套程序安装包,然后用用户自行对照自己的硬件条件,通过调整相关设置来实现不同体系平台、不同性能平台之间的程序通用性。
可以通过修改配置,让一款游戏运行在不同的平台之上
也许在未来我们会看到《GTAX》(侠盗飞车系列)中,PC安装时可以用FullHD分辨率,效果全开进行游戏;而在智能手机上,我们将分辨率调整到800×480,关闭各种特效后,用触摸屏来操作游戏。这样一来,OpenCL在实现通过计算的同时,也完成了在各个硬件平台上的跨平台运行。
在PC(x86)平台上,各类软件可以说95%以上实现向上兼容,简而言之就是装有Pentium处理器的电脑能够安装DOS,酷睿2平台能够安装Windows 98;但在其它平台上软件之间的兼容性就没有那么乐观了,PS3架构不能够支持PS2游戏(除非加入PS2硬件芯片),诺基亚S60第三版系统不能运行第二版的软件等等,这种例子不胜枚举。
为了保证程序的延续性,OpenCL标准在制定之初就考虑了向上兼容的问题,这点相信也是从
x86架构上得到的启发。OpenCL的开发人员表示,通过可扩展的API以及通用的库文件来保证未来新的硬件平台也能够运行今天的软件。这样就让OpenCL有了更好的平台延续性,为将来的发展夯实了基础。
OpenCL并不是第一个基于通用计算的标准,先是ATI(现AMD)提出了通用计算的概念,并抢先发布了自家的通用计算平台Stream,但因为种种原因后续开发工作不是非常理想;而后NVIDIA公司开发了名为CUDA的通用GPU计算开发包给业界,并小有成果。而英特尔方面也在紧锣密鼓地开发自己的新一代显示芯片——Larrabee,一种集成了10个x86处理器的图形显示单元,可以轻易将其转换为通用计算单元。
既然三家半导体巨头的竞争如此激烈,为什么会在支持OpenCL的问题上出奇的一致呢?
OpenCL与现有平台之间又有什么关联呢?
CUDA目前所取得的一些成就
要解释这个问题,首先就要从OpenCL的第一个字眼“Open”说起。虽然现有的通用计算平台已经在分布式运算、视频加速方面取得了一定进展,但是利用GPU或者是其它处理器进行通用计算仍然是一个新兴市场。如果没有一个强有力的通用开放协议来支持,任何公司都难以凭借一己之力快速和有效推广通用计算的理念。有了OpenCL的支持,通用计算市场这块蛋糕将会迅速膨胀,这对于任何一家参与其中的公司来说,都远远优于独自推广自己的专属平台。
首先,OpenCL对于NVIDIA来说利大于弊。诚然,现阶段NVIDIA在通用计算领域取得了一定的领先优势,但支持OpenCL对其来说并不意味着重新开始。CUDA平台与OpenCL平台都基于C语言编程和并行计算,二者之间并没有不可逾越的技术鸿沟。按照NVIDIA的说法,CUDA完全可以摇身一变成为OpenCL的一个高级开发组件,对于那些熟悉了OpenCL的程序操作员来说,可以迅速上手CUDA的开发环境,并使用CUDA中的一些高级功能加速开发进度。
ATI的Stream平台
对于AMD来说,OpenCL的出现正好解决了燃眉之急。虽然AMD是通用式计算的始祖,但随着市场的变化,AMD这些年来将精力和研发资源重点投向了CPU领域,这就造成其开发组件在完善程度上远远被NVIDIA抛在了后面。如今借助OpenCL的东风,AMD一下子可以在套件这方面拉近与
NVIDIA之间的距离。更重要的是,AMD今后只需要不断发布更强大的硬件和相关底层驱动库就可以了,开发套件的工作可以甩给OpenCL组织,集中力气干自己的事情,这可能是AMD加入OpenCL直接和现实的想法。
早在几年前,英特尔便展出了自己的80核心处理器,之后便转入Larrabee的开发工作中
对于老谋深算的英特尔来讲,支持OpenCL恐怕是一个不得不做的决定。我们可能一开始就忽略了英特尔在通用计算领域称霸的野心,当初提出的Larrabee计划从本质上看就是英特尔自家的通用计算平台,称之为显卡也许不过是其向外界抛出的一个“烟雾弹”——因为无论从哪些方面来说,英特尔更像是在做“几十个CPU”的超级芯片。英特尔很清楚,现在GPU的计算能力早已超过
CPU,如果不早做打算,未来的处境会非常不妙。而且利用自家多年来在x86,尤其是多核CPU上积累的设计经验,如多核集成、数据共享与调度、软硬件平台开发等都为Intel自己的通用计算多核平台奠定了基础。英特尔的初意图可能是想先稳住图形两强,让他们继续局限在3D加速的火拼当中。等到自己的Larrabee开发完成,再配合自家的CPU、芯片组一举拿下通用计算市场。可惜人算不如天算,NVIDIA与AMD的竞争导致战线蔓延,而自家的Larrabee却迟迟不能出手。如果不在此时选择支持OpenCL,那么将来在通用计算市场就会失去更多的话语权。
OpenCL第一波冲击里面肯定少不了Apple的操作系统
后,不得不佩服Apple及其研发团队的创新能力和敏锐的市场嗅觉。从初的图形化界面(
GUI),到后来Mac OS中漂亮的3D界面,Apple电脑在系统中的独特优势总是领先于同时代的PC平台;但随着市场的发展与变化,近十年来Mac OS相对于Windows、Linux操作系统之间的优势已经不再那么明显。
为了保持差异性,并进一步拉开差距,此时提出OpenCL的概念就成了一个绝佳的转折点。可以说开发OpenCL、并宣称迅速在Snow Leopard中将自己目前封闭但相对集中的软件升级至支持
OpenCL,这样的Apple电脑会在系统性能以及用户体验方面再一次大幅领先PC平台,帮助Apple重现昔日的辉煌。
细心的读者可能已经发现,在OpenCL的成员当中,缺少了一个有分量的名字——Microsoft,也许此时的微软正躲在暗处冷眼看着风风火火的OpenCL。
对于软件行业的巨无霸微软来说,其关注的目标并不是技术创新本身,而是如何利用手中的垄断地位和封闭技术进一步攫取财富。对于目前如日东升的OpenCL联盟,微软并没有表现出太多热情,甚至没准备在Windows 7中加入对OpenCL的支持。究其原因,无外乎是现在的OpenCL对自家的Windows、Office、Live等产品线并没有太大的推动作用,而且开放的标准很难让微软在OpenCL联盟中取得足够地位(垄断)的话语权。坏的是,如果此时大力支持OpenCL,将意味着大幅修改已初具雏形的Windows 7和下一代Office,代价太大。
制衡的力量并不总是来自于内部,看看OpenGL与DirectX的竞争之路就不难看出,OpenCL的发展不会是一帆风顺。对于一个开放性的标准来说,如果各成员之间心怀鬼胎,过分看重自己的利益,该标准的发展道路并不会平坦。1992年OpenGL 1.0发布的时候还没有DirectX,等到DirectX 1诞生时,OpenGL已经做到1.1版本;但由于OpenGL成员之间勾心斗角,在新的标准制定时互相拉锯,使得到目前为止OpenGL才推出了3.0版本,基本放弃了民用和游戏市场,委身于专业领域。反观DirectX的发展历史,十几年间不仅成功发展到10.1版本,还牢牢掌控了民用和游戏领域的主导权。如果OpenCL在未来的发展中又出现OpenGL的那种不团结的情况,未来鹿死谁手就难说了。
早在2000多年前,我国古人就悟出了“天下之事,分久必和”的道理。通用计算在经历了几年(对于高速发展的IT界,几年时间很长了)的各自发展后,现在到了由OpenCL进行大融合的时代。
微软操作系统在业界居于垄断地位,它的表态对OpenCL日后的发展至关重要
我们应该清醒地看到,虽然OpenCL现在只是一个襁褓中的婴儿,处于主流操作系统不支持、软硬件开发未上正轨的阶段,但是无论如何,OpenCL向整个IT业打开了通用计算的大门。按照其描绘的蓝图,未来的软硬件都将从全平台加速中获得极大的性能提升。以IT产业的发展速度,相信在不久的将来,OpenCL和通用计算必将贯穿整个IT产业,带来系统设计和搭配的新理念,并大幅提高硬件系统的性能功耗比。而对我们每个消费者,都将享受到通用计算带来的前所未有的流畅操作体验。后,让我们祝福OpenCL的发展一番风顺。