MyFPGA Forum

标题: OpenCL-1-编程四大模型介绍 [打印本页]

作者: Nicole_Terasic    时间: 2020-6-18 15:49
标题: OpenCL-1-编程四大模型介绍
本帖最后由 Nicole_Terasic 于 2020-6-18 15:53 编辑

        本节介绍OpenCL的四个编程模型。

0.前言

        OPenCL作为开放性的异构计算的标准,支持的平台有CPU、GPU、DSP、FPGA。支持的设备如此不同,那么需要对它们有一个统一的分层、模型划分,才能让各家更好的实现--平台模型、执行模型、内存模型、编程模型。

1.平台模型

1)OpenCL设备有两部分组成,宿主机和OpenCL设备

2)OpenCL设备内部由多个计算单元(CU)组成,每一个CU可以继续划分为处理单元(PU)。
3)执行流程: 宿主机负责管理所有的OpenCL设备,宿主机发起计算任务,选择特定的OpenCL设备并建立计算环境。然后将计算任务和数据发送给OPenCL设备。设备调用内部计算单元进行计算,完成后将结果返还给宿主机,该次计算任务结束。

2.执行模型

2.1执行模型概念

        OPenCL是一个主从处理模型,根本是宿主机如何利用OpenCL设备上大量的计算资源进行有效计算。所以OpenCL执行模型的任务就是如何高效地调用这些计算资源。

如果将我们常见的三维魔方想象成一个工作空间,那么一维即为红色的一行,即一维个数为3,二维为红色那个面,二维个数为9,三维即为整个工作空间,三维个数为27。


图1

2.2上下文
        计算工作主要在OpenCL设备上进行,但宿主机也扮演着非常重要的角色。宿主机主要通过上下文(Context)管理OpenCL设备。上下文指的是所管理硬件和软件资源,如下所示:


上下文由宿主机使用API进行创建、管理、销毁。

2.3命令队列
        宿主机主要通过命令对相应设备进行控制。根据计算量的大小,计算设备并不能立刻执行完被分配的计算任务。那么宿主机只能等着计算设备把任务计算完了才能继续分配新的任务么?显然不是,每一个计算设备都会有一个命令队列。命令队列只能管理一个计算设备。通过命令队列,就实现了宿主机和计算设备的异步控制与执行。

  队列中的命令主要有三种:


        乱序执行: 命令按照在命令队列中的顺序进行发射,但不保证计算设备是按照这个顺序进行执行的。
        有序执行: 命令按照在命令队列中的顺序进行发射和执行,上一条命令执行完成后才能发射下一条命令。

        宿主机程序可以为一个计算设备创建多个命令队列--一个计算设备可以有多个命令队列。这些命令队列没有关联。这也就意味着一个计算设备可以执行多个种类的任务,如小明可以在等待游戏加载的事件背几个英语单词 ~_~。

3.存储模型

        与通用计算程序的内存对象相似,OpenCL将设备中的存储器抽象成四层结构的存储模型:




图2

        在程序运行期间,需要宿主机和计算设备进行数据交换,存在两种方式:



4.编程模型

        前面已经提到计算的时候可以按照两种模型来进行计算:数据并行和任务并行。



        既然有数据或任务的并行,那么同步就成为一个绕不开的节点。并行是指在计算设备执行内核的过程中,对于其他的节点是绝对独立的,互不影响。OpenCL有三种方式进行同步:



转自:https://blog.51cto.com/9598289/2060008  
原文地址:http://coderdock.com
作者:CoderDock






欢迎光临 MyFPGA Forum (http://www.myfpga.org/discuz/) Powered by Discuz! X3