通用计算时代 深入分析CUDA与OpenCL

互联网 | 编辑: 张杨 2008-12-18 00:30:00原创 返回原文

作为NVIDIA这方来说CUDA从推广到实际运用都得到了从无到有的蜕变,目前也取得了不错的成绩。那么此时对于大多数读者来说会产生一个疑问,开放式的OpenCL 1.0标准出台,AMD与NVIDIA有了相同的GPU计算标准,此时NVIDIA的CUDA是否不再成为竞争优势呢?而CUDA与OpenCL又是否有关

NVIDIA CUDA+OpenCL战略打响

(2008年12月8日,美国加利福尼亚州圣克拉拉市) —— 在超级计算(SC)大会(http://sc08.supercomputing.org)上,大会组委会以及媒体合作伙伴每年都会为杰出的高性能计算(HPC)研究与成就进行颁奖。今年,NVIDIA® Tesla™ GPU以及NVIDIA CUDA™ 架构在多个分类中均获得了认可,这无疑说明GPU计算技术正在为高性能计算行业带来真正重大的影响。

OpenCL是首个开放的免费通用并行计算标准,将统一管理一台主机的所有计算资源,比如你的多核CPU、GPU等,OpenCL将这些资源统一看作计算单元,共同发挥运算能力完成各类计算任务。OpenCL统一编程环境,开发者能轻松利用异构平台写出高效的程序来。OpenCL将在服务器、PC和手持设置等上得到广泛应用。

而就在12月10日,由之前苹果公司提交到Khronos Group的OpenCL正式发布了通用计算标准OpenCL 1.0(Open Computing Language),同时也公布出OpenCL的具体规格细节。NVIDIA随即表态,宣布将采用OpenCL 1.0编程规范,并会把它加入GPU计算工具包。因为如果有了统一的标准,那么对于NVIDIA目前力推的GPU计算的普及就是水到渠成之事。

当然,作为NVIDIA这方来说CUDA从推广到实际运用都得到了从无到有的蜕变,目前也取得了不错的成绩。那么此时对于大多数读者来说会产生一个疑问,开放式的OpenCL 1.0标准出台,AMD与NVIDIA有了相同的GPU计算标准,此时NVIDIA的CUDA是否不再成为竞争优势呢?而CUDA与OpenCL又是否有关联呢?笔者通过搜集各方资料,并采访NVIDIA相关技术研究人员,为大家分析GPU的通用计算之路。

了解OpenCL,了解OpenCL工作组

何为OpenCL?——OpenCL实际上是针对异构系统进行并行编程的一个全新的API,简单来说OpenCL它可以利用GPU,然后进行一些并行计算这方面的工作,这是API应用程序的编程接口,图形里面也有很多API,比如OpenGL那是针对图形的,OpenCL是针对并行计算的API。OpenCL开发人员可以利用GPU和CPU的计算能力,把GPU和CPU异构的系统运用在很多并行计算的领域里面。而OpenCL最早由苹果公司在六月提交到了Khronos Group,这是一个业界的标准化组织,旨在提供一个通用的开放API,在此基础上开发GPU通用计算软件,随后Khronos成立“OpenCL工作组”负责标准的制订工作。实际上OpenCL对于业界来说是非常重要也是非常好的一个标准,这样的话业界有一个共同的标准可以利用GPU的强大计算能力,然后应用在图形以外各种各样的并行计算方面。

OpenCL工作组包括哪些?——OpenCL工作组的成员有很多,我们从中可以发现,不仅OpenCL影响着硬件厂商,其中还包括了很多移动设备领域的厂商,因此我们不应该将这个组织以及他们制定的标准局限在PC平台,也说明了在很多非PC领域上对开放API标准的需求同样重要。以前的OpenGL API并不能满足当前的需要,而OpenCL正是用来满足这些需求的,也从另一个侧面反映了NVIDIA一直强调的视觉计算发展方向。

NVIDIA、苹果与OpenCL——OpenCL最早是苹果公司提出来,早在2008年的10月份就我们就已看到采用了NVIDIA最新GeForce 9300/9400m移动芯片组的MacBook、MacBook Pro亮相,从侧面证明了苹果把GPU计算当成一种未来的趋势,并也已经宣布其明年发布的Mac OS X 10.6 Snow Leopard操作系统将集成OpenCL标准。实际上这也是促成OpenCL标准发布的重要条件之一。

Host Code
Compute Kernel

另外值得注意的是,就在两个多月前OpenCL也第一次进行了演示,其中所使用的平台是基于NVIDIA的GPU,也是目前为止OpenCL演示程序的唯一的平台。从Host Code 的部分我们可以看到,Host Code比CUDA更为繁琐,而右侧的Compute Kemel部分笔者也很难分清。但从概念上基本可以这样认为,在程序的开发上,两者还是有相当的差异的。至于如果OpenCL标准出台后,对于NVIDIA CUDA是否会产生影响呢?

CUDA和OpenCL之间的关系

NVIDIA的CUDA在架构上和OpenCL其实并不冲突,而CUDA架构只是OpenCL的运行平台之一,因此他们之间并不存在谁取代谁的关系。OpenCL仅仅是为CUDA架构提供了一个可编程的API而已。我们举个简单的例子:“CPU的X86架构,而各种编程语言,例如汇编语言、C语言、Fortran语言有Python语言、或者是其他的像Java或者以前的Pascal语言等等,你用不同的语言进行开发,最后你的执行还是在X86的架构上执行,而他们也仅仅是建立在X86运算架构之上的一种编程环境。所以,CUDA与OpenCL正是这样一种关系。

从CUDA的图片中我们可以了解到,CUDA也是一样,有CUDA这一套指令集,有这样的硬件,也就是说有不同的途径来进行开发,可以用OpenCL或者DirectX这样的API来进行计算的开发,也可以用C语言或者Fortran或者Java开发,这个道理是一模一样的。通过CUDA架构来处理并行计算工作。那么CUDA C语言和OpenCL是否存在冲突呢?答案仍然是否定的。

对于编程人员来说他可以选择不同的东西来进行编程,就像我们说的可以选择OpenCL编程也可以选择CUDA上面的C语言来编程,或者API的语言来编程。API和C语言进行开发是有一些不同的,API是一个编程接口,它的核心是函数库和应用程序开发的一个硬件接口,对于API来编程的话,它有一个好处,那就是可以访问比较低层次的硬件,但是他也有一点,就是很多的东西特别是像内存的管理,这个是需要程序员自己来进行管理的。而C语言相对来说我们在利用CUDA C语言来编程的时候,很多东西是由我们的开发环境来进行管理的,比如内存他是用runtime进行管理的,runtime实际上就是运行时的一些支持程序来进行这方面的管理。不管OpenCL或者CUDA C语言来编程,最终它都是需要通过一个驱动程序来变成一个PTX的代码,PTX相当于我们CUDA的指令集来进行执行,然后交给图形处理其或者交给硬件来进行执行。这两个最终达到都是使用PTX或者在我们GPU上进行执行。基本上大家可以理解为如果你想获得更多的对硬件上的控制权的话,你可以使用API来进行编程,比如我是一个科学家我对API不是太了解,你也可以用CUDA C语言来编程,这是两种不同编程的方式,他们有他们相同点和不同点。但是有一点OpenCL和CUDA C语言进行开发的时候,在并行计算这块,他们的概念是差不多的,这两种程序在程序上是有很大的相似度,所以程序之间的相互移植相对来说也是比较容易。

所以,作为OpenCL标准的制定者之一,CUDA和OpenCL原理是一样的,都是基于C语言编程,CUDA只能用于NVIDIA GPU(半封闭式),而OpenCL是完全开放的,可以支持任何GPU(DX9以上级别),但两者的关系并非对立的,而是互补的。CUDA包含编译器、软件工具以及应用程序接口(API),对于NVIDIA的显卡而言,OpenCL是进入CUDA并行编程架构的另一个应用程序接口。针对OpenCL以及CUDA,编程人员可以使用相同的理念体系以及并行编程策略。这两者在句法上非常相似,但是OpenCL更适用于OS X,而CUDA则基于标准的C语言,可适用于各种平台。针对NVIDIA的产品,OpenCL以及CUDA代码看上去是一样的。

硬变之道 GPU计算造就未来显卡

通过以上介绍,相信读者已经对CUDA与OpenCL两者之间的区别有一个深入的了解了。最后简单的来说,OpenCL是一种可运行在多平台上的并行计算API,而NVIDIA也是制定这项标准的成员之一。NVIDIA的CUDA是GPU并行计算架构,而OpenCL则是可以运行在其架构上的API。两者之间的编程模式不同,也并不存在任何冲突,而两者之间也更不存在哪个效率更高、哪个效率更低的区别,它们只是通向GPU加速代码的两种不同途径而已。OpenCL实际上是利用CUDA驱动程序堆栈来在NVIDIA GPU上实现高性能计算,OpenCL标准的出台,CUDA更是如虎添翼。

从OpenCL的路线图来看,目前OpenCL路线图目前还是属于Alpha版本。目前我们可以让OpenCL在NVIDIA GPU上很好地运行起来,明年第一季度可能是Beta的版本,09年是OpenCL1.0这个可能正式推出,OpenCL最开始可能出现在Mac OS上,以后逐渐的扩展到其他的操作系统,像Windows或者Linux。

最后来看一下NVIDIA透露的关于CUDA C语言的路线图。目前为CUDA 2.0,到今年年底的话NVIDIA会继续推出CUDA 2.1,而到明年会有2.2、2.3版本,到后来到CUDA 3.0。随着CUDA版本的升级,CUDA的功能也在不断地升级,比如由最早只能支持单精度的浮点计算,到CUDA 2,0可以支持双精度,可以支持各种各样的库,各种各样的功能也是越来越多。我们也相信随着NVIDIA CUDA架构应用范围的不断扩大,能在更多的领域中无论使用OpenCL还是CUDA都可以创造更多的财富。2009年,将是硬变之道的一年,让我们共同期待!

返回原文

本文导航

相关阅读

每日精选

点击查看更多

首页 手机 数码相机 笔记本 游戏 DIY硬件 硬件外设 办公中心 数字家电 平板电脑