对OpenCL研究了近一个月,现在有点小感想想同大家分享一下:
什么是OpenCL?按照字面的意思就是open computing language(开放计算语言)。那么他与OpenGL有什么关系呢?答案是没有什么关系,要说有唯一的关系那就是他们是同一个组织(Khronos Group,http://www.khronos.cn/about/index.shtml)制定的API标准,那么OpenCL与OpenGL有什么异同呢?
说的通俗易懂一点,OpenCL是一套利用处理器(CPU,GPU,或者其他处理器)并行运算能力来进行开发的API标准(到目前为止,CPU的并行处理能力跟GPU的并行处理能力是无法相提并论的,简单来说,是因为CPU每个核有只有一个计算单元,但是GPU一个核却有多达成百上千个计算单元),而OpenGL则是利用GPU来处理图像的API标准。当然,利用OpenCL进行图形开发的时候也是可以利用OpenGL的库,这个应该很容易能够理解。
好,接下来重点说说OpenCL,这里不得不提到一下NVIDIA的CUDA(Compute Unified Device Architecture,http://www.nvidia.cn/object/cuda_home_new_cn.html)以及ATI的ATI Stream(http://www.amd.com.cn/CHCN/ati/StreamTechnology.html)。
首先是CUDA,CUDA是NVIDIA设计出来的针对GPU的并行运算架构,就如同针对CPU的X86架构一样,然后再CUDA架构之上,NVIDIA最早设计了一套C扩展语言CUDA C来进行开发,现在也开始有了其他语言的版本。
然后是ATI Stream,其实最早提出并行运算概念的是ATI而非NVIDIA,但是由于ATI没有上心,因为当时基于ATI Stream技术的并行开发只能用汇编来进行开发,毫无通用性可言,所以就让NVIDIA占得了先机。
那么为何会有OpenCL呢,那是因为CUDA以及CUDA C都是NVIDIA自己制定的标准,没有通用性,而对于其他的厂商来讲,又急需要一套通用的针对并行开发的标准,所以OpenCL就诞生了。
那么OpenCL的出现是否对NVIDIA的CUDA是一个打击呢?显然不是,因为OpenCL是工作在CUDA架构上的,所处的级别和CUDA C是一样的,而CUDA C同OpenCL,那么是程序员自己的事情了,他们喜欢使用哪种方式就使用哪种方式,对于具体想了解CUDA与OpenCL在使用方面的异同,那么请看(http://diy.yesky.com/vga/65/8638065.shtml)而对于ATI来讲,那么OpenCL就是工作在ATI Stream上。