通用计算时代来临 论CUDA与OpenCL的异同

10 篇文章 0 订阅
10 篇文章 0 订阅
NVIDIA CUDA技术的到来,使GPU通用运算的应用领域得到了全面扩充,利用GPU强大的并行运算能力,使更加适合GPU进行运算的程序执行效率大幅提升。虽然早就有人提出了让并行计算架构的GPU,去处理非常适合他们的大规模并行计算工作,但是在CUDA问世前,所谓的GPGPU概念并没有真正的为我们解决问题,而早期专为图形运算而设计的GPU并不能通过一种 通用性强的手段完成在GPU上的编程任务,专业性强的图形计算语言仅仅掌握在少数的专业图形开发者的手中。

  NVIDIA CUDA技术的最大突破就是可以让用户通过简单、易用、使用率广泛的编程语言对GPU进行控制,从而为人们提供高效率的运算工作。而最近一个为“OpenCL”的名词越来越多的出现在我们的视线中。

  OpenCL是一种通用运算API,同样是种异构计算机的一种开放式开发语言,它也可以控制GPU去进行通用运算,并且还得到了IT业内广泛的关注和认同。CUDA和OpenGL都是创造计算机异构架构的方式,那么它们之间到底有何不同?OpenGL会不会取代CUDA?在进GPU通用运算时,我们应该使用CUDA还是OpenCL?……以上的问题越来越多的被关注GPU通用算的人提出,而对这两项技术了解不多的朋友更是被搞得一头雾水。

  今天我们就为大家带来一次CUDA和OpenCL的详细解析,从未为您揭开CUDA与OpenCL之间的关系之谜。

 并行计算的利器 OpenCL问世

  OpenCL 1.0规范在2008年12月浮出水面,12月9日在新加坡召开的2008亚洲SIGGRAPH大会上NVIDIA公司正式宣布完全支持Khronos Group新近发布的OpenCL 1.0技术规范。我们已经知道了OpenCL(开放式计算语言)是一种全新计算应用程序接口(API),它让开发人员能够利用GPU内部巨大的并行计算动力,那么Khronos Group又是什么呢?

  KHRONOS Group制定了OpenCL标准,KHRONOSGroup这个工作小组中包括了很多厂商,如:Intel、AMD、IBM、SONY、NOKIA……,NVIDIA也是KHRONOS Group的一员,并且参与了OpenCL内容的制定。由多个厂商成员组成的KHRONOS Group,提供了多种开放API标准的制定。

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

什么是OpenCL?

  OpenCL是一种全新计算应用程序接口(API),它的全称是Open Compute Library(开放式计算语言),它让开发人员能够利用GPU内部巨大的并行计算动力。OpenCL的作用就是为通用计算领域提供一个跨平台的统一标准语言。

  OpenCL最早是由Apple公司提出,而KHRONOS Group通过协调各个厂商,从而使OpenCL的跨平台特性更加完善。简单的说,OpenCL是针对并行计算的API,它可以利用GPU进行并行计算方面的工作,OpenCL API是应用程序的编程接口,图形程序也有很多API,比如OpenGL和DirectX……

  OpenCL开发人员可以利用GPU和CPU的计算能力,把CPU和GPU的异构系统运用在很多并行计算领域里面。


OpenCL工作小组


由KHRONOS所制定的开放标准

  OpenCL是KHRONOS制定的多项开放标准中的并行计算和可视化的标准API

并行运算架构——CUDA

  NVIDIA CUDA技术,也是为释放GPU并行计算能力而设计的,NVIDIA CUDA能够通过通用性防范的高级编程语言让GPU进行非常适合的并行计算。

  CUDA最初同NVIDIA GeForce 8800 GPU一道推出,现在NVIDIA所有GPU均已支持CUDA。CUDA是NVIDIA并行计算战略的基础。与使用CPU相比,科学家们见证了CUDA为其应用程序所带来的最高20到200倍的速度提升,CUDA已经被全球研究界人士所广泛采用。从超级计算机与工作站到消费类PC,CUDA架构已被构建到各种各样的计算系统中。现在,目前有25,000多名开发人员利用CUDA架构从事活跃的开发工作。

  由于C语言具备易学、使用者多等等普遍性,因此NVIDIA将C语言作为了CUDA架构的编程语言,CUDA C语言让很多对GPU架构、特性并不了解的人,同样可以控制GPU为他们服务。

  虽然CUDA C让人们真正的了解了GPU通用运算,在很多领域体验到了CUDA的优势,但是还是有很多人不太了解什么是CUDA,CUDA其实并不是一种编程语言,而是一种并行运算的架构,我们可以把每个支持CUDA的NVIDIA GPU当作是一个CUDA架构,例如:GT200,在进行通用运算时,我们就可以把他们当作是一个240个处理器的CUDA架构,而CUDA C语言仅仅是协调、控制这个CUDA架构的一种语言环境。


CUDA C语言发展路线图

 OpenCL与CUDA的关系

  NVIDIA的CUDA架构和KHRONOS制定的OpenCL并不冲突,他们之间的关系是API与执行架构之间的关系,举个简单的例子:我们熟悉的X86架构是一种CPU架构,而各种编程语言,如:汇编语言、C语言等低级语言或高级语言仅仅是建立在X86运算架构之上的一种编程环境。那么,CUDA架构和OpenCL之间的关系和X86与编程语言的关系是相同的。

  CUDA架构是OpenCL的运行平台之一,因此他们之间并不存在谁取代谁的关系。OpenCL仅仅是为CUDA架构提供了一个可编程的API而已。

  CUDA架构与编程语言、API的关系

  为了有助于大家理解,我们制作了上面的示意图,从图中我们可以看到,C语言和OpenCL才是在相同级别上的,而CUDA架构是在它们之上的,在CUDA架构上,还可以使用更多的编程语言,DirectX 11计算、古老的Pascal、Fortran语言、JAVA都可以控制CUDA架构,通过CUDA架构来处理并行计算工作。那么CUDA C语言和OpenCL是否存在冲突呢?答案仍然是否定的。


CUDA C语言和OpenCL是两种不同的编程模式

  对于编程人员来说他可以选择不同的语言或者API进行编程,可以选择OpenCL编程也可以选择CUDA上面的C语言来编程,或者其他API的语言来编程。API和C语言进行开发是有一些不同的,API是一个编程接口,它的核心是函数库和应用程序开发的一个硬件接口,对于API来编程的话,它有一个好处,那就是可以访问比较低层次的硬件,但是它也有一点,特别是像内存的管理,这个是需要程序员自己来进行管理的。而C语言相对来说我们在利用CUDA C语言来编程的时候,很多东西是由我们的开发环境来进行管理的,比如内存他是用runtime进行管理的,runtime实际上就是运行时的一些支持程序来进行这方面的管理。不管OpenCL或者CUDA C语言来编程,最终它都是需要通过一个驱动程序来变成一个PTX的代码,PTX相当于我们CUDA的指令集来进行执行,然后交给图形处理其或者交给硬件来进行执行。这两个最终达到都是使用PTX或者在我们GPU上进行执行。

  简单的说,CUDA C和OpenCL的关系就像是武将所使用的不同武器一样,剑和刀都可以让武将杀敌,而这两种武器的使用方法是不一样的,而CUDA架构和OpenCL、CUDA C的关系就相当于武将和武器,CUDA架构(武将)可以很好的驾驭CUDA C语言(刀),也可以熟练的使用OpenCL(剑),而刀和剑的特点并不一样,它们都有各自的长处。而编程者开发程序的作用就像是一本武功秘籍或兵器使用指南,哪本秘籍能让武将更完美的驾驭兵器,哪个就能得到更好的结果,因此CUDA C和OpenCL之间也不存在哪个效率更高、哪个效率更低的区别,决定效率的仅仅是程序的效率。

NVIDIA携手OpenCL引领GPU通用运算

  相信看过前面的内容后,大家能够了解OpenCL和CUDA的关系,下面我们来对两者的关系进行一下总结:

  1、 OpenCL是KHRONOS成员制定的,可运行在多种平台上的并行计算API,NVIDIA也是制定该标准的一员。

  2、 CUDA是NVIDIA的GPU并行计算架构,OpenCL是可以运行在该架构上的API

  3、 CUDA C和OpenCL的编程模式不同,两者不存在冲突

  4、 CUDA C的效率无法直接与OpenCL进行对比,决定权在编程者编写的程序端

  NVIDIA的CUDA技术开启了GPU实现通用运算的大门,而OpenCL的到来,则使CUDA架构可以在更多的领域中得到发挥,让更多以往从事OpenGL API编程的人找到了开发GPU并行计算能力的钥匙。另外,OpenCL所具备的开放性使跨平台的程序可以在CUDA架构上高效运行,使CUDA架构得到了更多的使用价值。

  从Apple公司首次提出OpenCL概念到OpenCL 1.0的真正问世,NVIDIA都在其中扮演了重要的角色,相信在CUDA架构应用范围的逐渐扩大,更多的人在更多的领域无论是使用OpenCL还是其他CUDA所支持的API、编程语言,都可以创造更多价值!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值