OpenCL程序同CUDA程序一样,也是分为两部分,一部分是在主机(以CPU为核心)上运行,一部分是在设备(以GPU为核心)上运行。在设备上运行的程序被称为核函数。但是对于核函数的编写,CUDA一般直接写在程序内,OpenCL是写在一个独立的文件中,并且文件后缀是.cl,由主机代码读入后执行,这一点OpenCL跟OpenGL中的渲染程序很像。

汇总一些OpenCL的基本概念,包括设备、核函数、主机、平台等,把这些概念跟CUDA类比,理解起来就很容易了。


设备(Device): GPU及其显存组成的计算系统。


核函数(Kernel): 是在设备程序上执行运算的入口函数,在主机上调用。


SIMT(Single Instruction Multi Thread): 单指令多线程,GPU并行运算的主要方式,很多个多线程同时执行相同的运算指令,当然可能每个线程的数据有所不同,但执行的操作一致。


工作项(Work-item): 跟CUDA中的线程(Threads)是同一个概念,N多个工作项(线程)执行同样的核函数,每个Work-item都有一个唯一固定的ID号,一般通过这个ID号来区分需要处理的数据。


工作组(Work-group):跟CUDA中的线程块(Block)是同一个概念,N多个工作项组成一个工作组,Work-group内的这些Work-item之间可以通信和协作。


ND-Range: 跟CUDA中的网格是同一个概念,定义了Work-group的组织形式。


主机(Host): CPU及其内存组成的计算系统。


品台(Platform): 主机和OpenCL管理框架下的若干个设备构成了一个品台,所有GPU操作都限定这这个选择的Platform上运行。OpenCL编程的第一步就是选择并初始化一个平台。


上下文(Context): 定义了整个OpenCL的运行环境,包括Kernel、Device、内存管理和指令队列等


指令队列(Command-Queue): 一些需要在设备上执行的OpenCL指令的集合。

 

posted on 2017-02-22 22:09  未雨愁眸  阅读(494)  评论(0编辑  收藏  举报