正在阅读:了解CUDA架构/OpenCL存在意义了解CUDA架构/OpenCL存在意义

2009-04-21 10:24 出处:PConline原创 作者:佚名 责任编辑:yejianfei

  CUDA是什么?很多人认为它是一个由NVIDIA设计的一种新软件或者新API,不过笔者在此要告诉大家,CUDA是一种硬件架构,也就是说目前NVIDIA的GeForce产品全都基于CUDA架构设计。CUDA架构最主要的包含两个方面:一个是ISA指令集架构;第二硬件计算引擎。实际上它就是硬件和指令集,这两个方面是CUDA的架构。

  NVIDIA GPU的架构就是CUDA的架构,举例来说,你可以把它看成是跟Intel的X86或者IBM的Cell,他们都是CPU架构,而CUDA架构是基于GPU的架构。

  CUDA的GPU架构和CPU架构很类似,比如X86是包含一套指令集和执行X86各种各样的CPU,而对于CUDA也是一样的,NVIDIA有一套指令集ISA,还有各种各样执行指令集和各种各样的硬件引擎。另外CUDA到目前为止,它包含了一个C语言的编译器,就是在CUDA上面的C语言,CUDA这个架构还可以支持其他的API,包括OpenCL或者DirectX,同时以后NVIDIA的CPU还支持其他语言,包括Fortran、Java、Python等各种各样的语言,可以说这种架构是原生的,专门为计算接口而建造的这样的一个架构。CUDA硬件架构包括指令集都是非常适合于并行计算,为异构计算而设计的一整套架构。

  也许会有人疑问,既然有了CUDA为何还需要OpenCL,或者类似OpenCL的API呢?

  简单来说,对于编程人员他可以选择不同的方式来进行编程,他们可以选择OpenCL API编程也可以选择C for CUDA语言来编程。

  而API和语言的编程、开发存在着本质的不同,API是一个编程接口,它的核心是函数库和应用程序开发的一个硬件接口。用API来编程的话它有一个好处,那就是可以访问比较低层次的硬件资源,但这样的最大化控制硬件资源带来了很多弊端,例如在内存管理上就必须靠编程人员手动控制,这就需要编程人员要拥有高超的编程技术和深厚的经验积累。而就C for CUDA来说,编程人员在利用C for CUDA语言来编程的时候,无需考虑过多与自身编程目的以外的因素。再拿前文提及的内存管理来说,C for CUDA使用Runtime进行管理。

  不过不管OpenCL还是C for CUDA语言来编程,最终它都是需要通过一个驱动程序来变成一个PTX的代码,PTX相当于CUDA的指令集来进行执行,然后交给图形处理其或者交给硬件来进行执行。这两个最终达到都是使用PTX或者在我们GPU上进行执行。

  简单来说,如果你想获得更多的对硬件上的控制权,你可以使用API来进行变成。而如果你对API不是十分了解,或者说无法很好的掌控API编程,这时你可以用CUDA C语言来编程。二者是两种不同编程的方式,它们有相同点也有不同点,但是有一点OpenCL和CUDA C语言进行开发的时候,在并行计算方面它们的概念十分接近,这也就奠定了程序之间的相互移植会比较容易。

  对C语言编程了解的读者应该知道,C语言利用的驱动程序就是API,也许谈及这个很抽象,实际上C for CUDA就是一种C语言的扩展,而针对扩展的主要方面就是并行运算编程,这些是通过C的扩展来获得。基本上认为CUDA的程序也是一种标准的C语言的程序,然后你使用一些关键字然后来对并行这方面计算,然后做一些区分。C语言最终编译会成为PTX的代码,然后在GPU上执行。

  OpenCL是一个API,就是应用程序的编程接口,OpenCL和OpenGL很像,这种API你可以调用API里面的函数库,通过程序开发调用各种各样的函数,实现各种各样的功能。对于API来说一般它对硬件设备有比较完整的访问权,你可以访问硬件设备,可以对内存进行管理,最后OpenCL通过编译和驱动程序可以生成PTX代码在GPU上进行执行。

 
受不了多愁善感的天气?那就选部好片宅在家 追求极致的体验 神画智能影院F1 Pro新品评测 斐讯与他的0元购:一个猜到开头却猜错结尾的故事 不好意思 你在电脑上干了什么我们都知道! 国外随时掐断咱的网络?危言耸听还是确有其事

为您推荐

加载更多
加载更多
加载更多
加载更多
加载更多
加载更多
加载更多
加载更多
加载更多
热门排行

服务器论坛帖子排行

最高点击 最高回复 最新
最新资讯离线随时看 聊天吐槽赢奖品