CUDA遭遇劲敌? GPU计算OpenCL标准分析
在消费级市场,基于CUDA技术的PhysX物理加速和Badaboom视频编码所带来的超强性能令人惊讶不已,而在专业级的科学、气象、金融甚至是军事领域,海量并行计算对性能的渴求永无止境,CUDA所带来的超强运算能力正好符合科研工作者的需求,这也就是CUDA在近两年来发展如此迅猛的根本原因!
面对前景如此广阔的市场,IT巨头们个个摩拳擦掌、欲大展身手,Intel、AMD、NVIDIA、IBM都纷纷致力于研发自己的通用并行计算平台,乘市场未成熟之际抢占份额,一时间场面比较混乱,没有统一的标准。
天下大势,分久必合。这次关于开放式通用计算平台的统一,发起于以“封闭”着称的苹果公司。这个新的标准被称为OpenCL,英文全称是Open Computing Language。他们将这个标准提交到了The Khronos Group,这是一个业界的标准化组织,目前管理着大名鼎鼎的OpenGL(图形)和OpenAL(音频)
OpenCL为基石 GPU通用计算行业标准诞生
负责推广OpenGL等开放标准的行业组织Khronos Group日前正式宣布,将组建一个新的“计算工作组”,负责起草针对GPU、CPU并行计算进行编程的全免费开放行业标准。苹果提出的OpenCL将成为该标准的奠基文档。
OpenCL一经提出就受到业界的大力支持
该工作组的首批成员包括:3Dlabs、AMD、苹果、ARM、Codeplay、爱立信、飞思卡尔、Graphic Remedy、IBM、Imagination Technologies、Intel、诺基亚、NVIDIA、摩托罗拉、QNX、高通、三星、Seaweed、德州仪器和瑞典Ume 大学。工作组的目标非常明确,将运算核心越来越多,性能越来越强的GPU从仅限于图形运算领域的桎梏中解放出来,充分调动其运算能力。未来,该标准能够提供给不同厂商的硬件提供一个通用的应用程序接口,使计算机中的GPU和CPU共同发挥运算能力完成各类计算任务,包括同为该组织标准的OpenGL、OpenGL ES API加速,以及诸如物理效果运算,图像处理和图像识别等等。
在WWDC苹果开发者大会上,苹果宣布预计明年发布的Mac OS X 10.6 Snow Leopard操作系统将引入名为OpenCL的新特性,通过基于C语言的编程接口实现GPU通用计算支持。Khronos工作组表示,他们欢迎成员企业和全球其他任何企业为开放通用运算标准提供内容。但毫无疑问,苹果提出的OpenCL已经成了该标准的奠基石。甚至现在看来,苹果当初的命名想必也已经考虑了成为行业标准的前景。未来该标准直接定名为OpenCL,从目前来看几乎是一件顺理成章的事情。
当前,AMD和NVIDIA甚至Intel都有各自独立的GPU通用计算计划。而对消费者来说,一个开放的行业标准无疑要比各自为战的企业标准亲切的多。由于AMD、NVIDIA、Intel同为工作组成员,这一标准的提出为我们描绘了一个美好的未来:无需区分哪家厂商的产品,不分GPU、CPU,系统可以根据当时的应用需要,调动各个处理器的运算能力,以协同合作的方式最快速度完成工作。另外,Khronos Group还表示,该标准不仅面向桌面PC,还将针对嵌入式系统。从工作组名录中出现的诺基亚、爱立信、摩托罗拉、三星、高通等名字也能看出端倪,移动设备的通用计算肯定也在工作组的计划当中。
OpenCL将统一管理一台电脑上的所有计算资源,比如你的多核CPU,以及多个GPU。OpenCL将这些资源统一看待,算作计算单元,并配置各种级别的内存:private、local和global。每个计算单元可以容纳多个工作单元,类似CUDA里的thread概念。#p#page_title#e#
简单说明下OpenCL和CUDA的不同:
- OpenCL提供统一的标准,让不同厂家的设备来支持,使得我们可以统一看待计算资源。这个计算资源不但包括GPU,也包括CPU。
- OpenCL更关注于多个计算资源的管理,不但在计算单元内部可以实现并行,而且对于一台宿主机上的所有计算设备的并行化进行管理。
虽然CUDA和OpenCL是两种标准两种概念,但其实两者并不是对立的存在,不但不会产生利益冲突,反倒是一种互补互利的关系。因为NVIDIA不但是OpenCL标准的制定者之一,而且是苹果的亲密合作伙伴。比如苹果新一代MacBook将会采用NVIDIA的GeForce 9400M GPU,这款整合显卡拥有16个流处理器,既能运行基于CUDA的应用程序以及对其进行编程,将来也能完美支持基于OpenCL API的并行计算程序。
AMD在内部文档中暗指NVIDIA的CUDA为“封闭技术”
此前AMD攻击NVIDIA,称CUDA为封闭的标准,而AMD则大力支持完全开放的OpenCL。但目前来看NVIDIA两手抓两手都要硬的策略还是更加靠普,在OpenCL成型之前的真空期,CUDA已经大展宏图取得了骄人的战绩,待到OpenCL完善后NVIDIA也会无条件提供支持,将兼容性和效能发挥到最大。而对于AMD来说,GPU通用计算则要完全依赖OpenCL,因此目前AMD并行计算尚未正式进入实际应用阶段,只有等待OpenCL API成熟之后,才能在其基础上进行二次开发,无论运算效率还是软件支持度都将会大打折扣!
针对CUDA与OpenCL之间错综复杂的关系,笔者咨询了NVIDIA相关技术人员,分享给喜欢研究技术与关注行业动态的朋友们。
- NVIDIA已经有了自家的CUDA平台,为什么还要支持OpenCL标准?
答:当然要支持。Apple是一家实力强劲的合作伙伴,他们宣布以GPU作为其操作系统以及应用程序战略的核心,这是对并行计算运动提供强有力的支持。我们已经在CUDA身上投入了五年多的精力,而支持CUDA的NVIDIA GPU数量也超过了8000万颗,NVIDIA不但是Windows平台的最佳选择,对与Mac OS X以及Linux等各种操作环境也极为重视。OpenCL标准的出台有助于拓展GPU的功能及市场,NVIDIA没有理由不支持。
- NVIDIA在OpenCL标准的制定过程中扮演着什么样的角色?
答:作为GPU技术的行业领袖,我们有责任推动和发起并行计算运动。我们已经在CUDA身上投入了五年多的精力,CUDA团队将继续支持我们所有的合作伙伴,帮助他们将并行GPU计算推向市场。NVIDIA在CUDA研发过程中的经验以及NVIDIA GPU庞大的市场占有率奠定了举足轻重、不可或缺的角色!
- OpenCL是否基于CUDA而开发?两者的异同?
答:CUDA包含编译器、软件工具以及应用程序接口(API),是一款经过精心调试与完善的编程环境和架构,对我们而言,OpenCL是进入CUDA并行编程架构的另一种应用程序接口。
针对OpenCL以及CUDA,编程人员可以使用相同的理念体系以及并行编程策略。二者在句法上非常相似,但是OpenCL更适用于OS X,而CUDA则基于标准的C语言,可适用于各种平台。我们已经设计出了软件栈,因此对我们的硬件来说,OpenCL以及CUDA看上去是一样的。它们只是通向GPU加速代码的两种不同途径而已。
- CUDA与OpenCL能否互相兼容?
答:CUDA和OpenCL二者的应用程序接口(API)有所不同,因此代码也不会完全兼容。然而,它们在定义数据并行机制方面有类似的构造,因此它们的代码会非常相似,而且移植工作也会非常省力。现在的情况是,CUDA已经面世并且得到了包括OS X在内的所有大多数操作系统的支持,这就意味着开发人员现在拥有了一个稳定、普及的环境来开发gigaflop级浮点性能GPU应用程序。这种开发环境在OpenCL发布时可通过OpenCL轻松地与OS X整合在一起。
- OpenCL是否会代替CUDA?NVIDIA是否支持将OpenCL指定为一种行业标准?
答:CUDA是不会被取代的,OpenCL实际上可利用CUDA驱动程序堆栈来在NVIDIA GPU上实现更高的性能。NVIDIA当然支持OpenCL,我们支持所有的标准制定工作