本节介绍OpenCL的四个编程模型。编程
OPenCL做为开放性的异构计算的标准,支持的平台有CPU、GPU、DSP、FPGA。支持的设备如此不一样,那么须要对它们有一个统一的分层、模型划分,才能让各家更好的实现--平台模型、执行模型、内存模型、编程模型。数组
OpenCL设备有两部分组成,宿主机和OpenCL设备异步
OPenCL是一个主从处理模型,根本是宿主机如何利用OpenCL设备上大量的计算资源进行有效计算。因此OpenCL执行模型的任务就是如何高效地调用这些计算资源。函数
OpenCL规范中使用一个长度为N的整数数组来描述工做空间的大小(N<=3)。数组中的数值对应相应维度上工做点的个数。spa
计算工做主要在OpenCL设备上进行,但宿主机也扮演着很是重要的角色。宿主机主要经过上下文(Context)管理OpenCL设备。上下文指的是所管理硬件和软件资源,以下所示:指针
上下文由宿主机使用API进行建立、管理、销毁。code
宿主机主要经过命令对相应设备进行控制。根据计算量的大小,计算设备并不能马上执行完被分配的计算任务。那么宿主机只能等着计算设备把任务计算完了才能继续分配新的任务么?显然不是,每个计算设备都会有一个命令队列。命令队列只能管理一个计算设备。经过命令队列,就实现了宿主机和计算设备的异步控制与执行。对象
队列中的命令主要有三种:索引
同步命令:约束命令在计算设备上的执行:队列
宿主机程序能够为一个计算设备建立多个命令队列--一个计算设备能够有多个命令队列。这些命令队列没有关联。这也就意味着一个计算设备能够执行多个种类的任务,如小明能够在等待游戏加载的事件背几个英语单词 ~_~。
与通用计算程序的内存对象类似,OpenCL将设备中的存储器抽象成四层结构的存储模型:
在程序运行期间,须要宿主机和计算设备进行数据交换,存在两种方式:
前面已经提到计算的时候能够按照两种模型来进行计算:数据并行和任务并行。
1/N
。这适用与数据想关联不大的计算任务。既然有数据或任务的并行,那么同步就成为一个绕不开的节点。并行是指在计算设备执行内核的过程当中,对于其余的节点是绝对独立的,互不影响。OpenCL有三种方式进行同步:
版权声明:本文为博主原创文章,转载需声明为转载内容并添加原文地址。
更多博主原创文章,请移步:
原文地址:http://coderdock.com