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