原文地址: https://blog.csdn.net/wish fly/article/details/51860417如有侵权,请联系删除

通用计算并支援新锐OpenCL CUDA

GPU经过多年的发展,从单一功能的3D计算逐步扩展了视频解码、通用计算等。 而且,通用计算这一当今最耀眼的技术新星受到科研机构和个人消费者的普遍关注。

众所周知,NVIDIA是GPU通用计算技术的先驱,其CUDA架构产品深入人心。 然后,在通用计算的API层面上,不仅是NVIDIA的一家公司,由苹果公司主导的OpenCL也得到了业内同行的大力支持,当然NVIDIA也是OpenCL的核心成员之一。

2008年12月9日,在2008年亚洲SIGGRAPH大会上,全球视觉计算技术行业领导者NVIDIA公司今天正式宣布,完全支持Khronos集团最新发布的OpenCL 1.0技术规范。 开放式计算语言(OpenCL )是一种新型的计算APP编程接口(API ),允许开发人员利用GPU内部巨大的并行计算动力。 OpenCL的加入是GPU革命史上的另一个重要里程碑,为NVIDIA开发者提供了另一个强大的编程选择。

Khronos集团是非营利会员组织的行业协会,Khronos致力于开发免费APP接口API和相关标准生态系统,包括手持设备、控制台和嵌入式系统等高级动态指标例如OpenGL ES、OpenKODE、OpenMAX、OpenVG、OpenSL ES、COLLADA等,当然还有今天的主角OpenCL。

OpenCL一经提出,就得到了世界顶级硬件软件制造商的广泛支持。 特别是已经处于通用计算前沿的NVIDIA,Neil tre vett (Nvidia的嵌入式内容副总裁),在Khronos担任OpenCL工作组的会长。

Neil Trevett表示:“OpenCL技术规范是NVIDIA等行业领导者在意识到这一机遇的基础上取得的成果。 开放、跨平台的标准使该技术规范在整个异构并行计算市场上得到更多的认可。 NVIDIA将继续活跃在OpenCL工作组,推动该技术规格的发展,在所有NVIDIA平台上支持OpenCL,为开发者提供另一种方式利用我们GPU强大的计算动力。 ‘ ‘

什么是OpenCL? 和CUDA有什么关系?

OpenCL实际上是指异构系统(一般为cpu和GPU )一起进行计算,虽然是两个不同的设备,但由于是一起工作,所以有必要设计成能够协作。 将这样的CPU GPU群称为同步异种处理器群) ) ) ) ) ) ) ) )并行编程的新型API,简单来说,OpenCL可以利用GPU进行几个并行计算的作业。 这是API APP的编程接口,在图形中也有很多API。 例如,OpenGL和DirectX用于图形,而OpenCL用于并行计算。 OpenCL开发者利用GPU和CPU的计算能力,可以将GPU和CPU不同的系统活用于很多并行计算领域。 Khronos是一个由众多制造商组成,成员非常多的组织。 该工作组还是OpenCL的协调机构,名为Khronos的工作组负责OpenCL的规格、体系结构等各个方面。 业界最主要的图形和计算制造商是Khronos的成员。

有趣的是,OpenCL得到了Khronos组织众多成员的支持,也验证了开发GPU并行计算能力的需求越来越高。 正是因为有了这个需求,OpenCL才完成的。

NVIDIA和OpenCL是什么关系?

事实上,OpenCL是行业非常重要和卓越的标准,它的出现使得行业拥有共同的标准,利用GPU强大的计算能力,应用于各种除图形外的并行计算中。 其中,NVIDIA一直也参与了OpenCL的工作,就像前面提到的NVIDIA副总裁Neil Trevett一样,他现在担任OpenCL工作组主席,领导着很多OpenCL的开发。 当然,这个组织还有很多其他开发公司。

OpenCL最初由苹果公司提出,从OpenCL一开始,NVIDIA就与苹果公司进行了非常紧密的合作。 在OpenCL开发的过程中,其技术平台都是NVIDIA的GPU,实际上OpenCL是基于NVIDIA GPU的平台开发的。 另外,OpenCL最初的演示也是在NVIDIA的GPU上的演示,可以说是迄今为止NVIDIA GPU几乎唯一一个进行OPEC程序的平台。

另外,还有非常重要的事情。 对苹果公司来说,他们认为GPU计算是未来的趋势。 他们非常重视OpenCL,在新一代产品中选择最适合OpenCL运行的平台。 因此,他们的新一代苹果笔记本电脑都采用了NVIDIA平台,MacBook Pro、Mac OSX都采用了NVIDIA公司的平台。 其实这也从另一个方面证明了NVIDIA的GPU对于OpenCL的支持是迄今为止最好的硬件平台。

彻底理解CUDA体系结构/OpenCL的存在意义

什么是CDA? 很多人认为那是1

个由NVIDIA设计的一种新软件或者新API,不过笔者在此要告诉大家,CUDA是一种硬件架构,也就是说目前NVIDIA的GeForce产品全都基于CUDA架构设计。CUDA架构最主要的包含两个方面:一个是ISA(工业标准架构体系(Industry Standard Architecture,通常简称ISA)是IBM PC兼容机上的一种总线。)指令集架构;第二硬件计算引擎。实际上它就是硬件和指令集,这两个方面是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上进行执行。

OpenCL未来发展目标激进

通过OpenCL的路线图我们能够看出,目前OpenCL还处于Alpha版本,但NVIDIA的产品已经可以非常好的支持OpenCL。明年第一季度Khronos Group会发布OpenCL Beta版本,而OpenCL1.0正式版也可能在明年正式推出。不过OpenCL最开始可能出现在Mac OS上,不过随着以后的逐渐扩展,例如Windows或者Linux等系统都将会得以支持。

对于CUDA C语言,NVIDIA一直不断地对其进行更深层次的开发,同时也不断的有新版本的出现,到目前为止已经是CUDA 2.0。CUDA C语言NVIDIA研发已经超过5年时间,基本上从2003年左右就开始开发这个语言开发。

并且到目前为止,开发人员的数量已经是超过25000人,应用程序超过100个,特别在科学计算的领域里CUDA的应用极为广泛,几乎涉及到各种各样的HPC高性能计算的领域。甚至现在HPC(High-performance computing )进入排行榜前100的高性能计算机里面也有使用NVIDIA基于CUDA的Tesla系统,它的开发语言正是使用了CUDA C语言。目前GPU集群组成的高性能计算机集群数量已经达到了30个,在中国也有相关产品。

CUDA C语言是一个跨操作系统的开发工具,现在支持Windows、Linux、Mac OS,几乎把控了目前最主流的操作系统。NVIDIA的CUDA C语言提供了很多的库,这些库主要包括FFT、BLAS等,它们可以提供各种各样现成的代码让编程人员使用。

也许有这样的开发者,他可能对CUDA并不熟悉,但他又想要使用CUDA的高性能计算该怎么办?很简单,他就把现有的应用软件,例如FFT,使用CUDA的FFT的代码直接替换,就这样他便可以获得20倍以上的性能提升。也就是说,这些库是CUDA C语言非常重要的资源,可以让大家缩短研发周期、体验CUDA带来的高性能,例如一些数学软件像Matlab、Mathematica、LabView都有CUDA的插件,可以使用C语言的插件让他更容易的利用CUDA。

CUDA/OpenCL共进退 前途无量

这是NVIDIA的CUDA C语言路线图,现在CUDA正处于2.0版本,到今年年底NVIDIA可能会推出CUDA 2.1版本,到明年会有CUDA 2.2、CUDA2.3版本,最后迎来CUDA 3.0。随着CUDA版本的升级,它的功能也在不断地升级,比如最早的CUDA只能支持单精度的浮点计算,现在可以支持双精度,还可以支持各种各样的库。

总结的来说,OpenCL无论对开发人员还是业界人员、消费者来说,都是一个非常好的API,一个应用程序的接口。它可以使开发者更容易的开发出跨平台GPU计算程序,并将GPU强大的计算能力利用到各种各样应用计算中。

对于NVIDIA来说,现在CUDA架构上除了C语言以外,现在新增加了OpenCL或者DX11这样的API,对于开发人员来说也是提供了一种更好的GPU计算的开发环境。因为对API很熟悉的开发人员,他们肯定会很高兴的看到OpenCL或者新的API的加入,对于这些人来说他们很容易利用这种API进行各种各样GPU计算程序开发。对于NVIDIA来说还会继续对C语言包括其他语言的支持,实际上对NVIDIA CUDA C语言来说Runtime C仍是目前唯一的语言环境。今后除了C语言外,NVIDIA还会推出更多的CUDA语言,这包括Fortran,还会有Java等。

openCL(opencl教程-编程之家