OpenCL 概述(一)

版权声明:本博客个人原创,转载请注明!谢谢! https://blog.csdn.net/yongtongguan9284/article/details/82084859

工作需要学习OpenCL, 网上学习OpenCL的资料并不多,因为可能会长期使用这个框架,所以将学习过程记录下来。到目前为止学习了差不多三四个星期,也只是根据自己有限的知识和理解对其进行说明,有错误或者理解不到位的地方,希望大神指出。

预备知识

OpenCL是异构编程框架,初学者可能对很多概念存在疑惑,我根据我在学习过程中存在疑惑的问题,分别对相关名词和概念进行说明,方便后面继续学习。
另外,本博客的OpenCL文章都是针对GPU 异构计算进行说明的,所以会侧重于GPU编程方向解释,别的设备有涉猎以后再补充。

异构计算
则是维基百科上的解释:Heterogenous Computing refers to systems that use more than one kond of processor or cores.These systems gain performance or energy efficiency not just by adding the same type of processors, but by adding dissimilar corprocessors, usually incoporting specialized processing capabilities to handle patticular tasks.

通俗地来说,异构计算是指多种处理器或核的设备,这些核可以是同一种类型也可以是不同类型,如下图所示:
这里写图片描述

OpenCL

OpenCL全称是Open Computing Language,是一种开放的工业标准,可以为CPU\GPU和其它设备组成的异构群进行编程。它不仅仅是一种语言,也是一个并行编程框架。通过其框架则可以实现异构编程,因为是跨平台的,可移植性强,只需添加设备上提供的库即可。

OpenCL平台是指:设备商通过提供OpenCL框架和底层硬件相结合的工具包,编程人员则不需要考虑底层硬件组成,在应用层直接按照OpenCL的框架进行编程即可。以Vivante GPU编程为例,购买时Vivante会提供其开发工具包,在编程时,即使你不了解GPU的硬件结构,只要按照OpenCL规范编程,则可以实现GPU异构计算。关于平台的具体含义,如果还是不明白,将在下一篇矢量相加的Demo中进行说明,结合具体实例,其含义就一目了然了。
另外,OpenCL最新的版本是OpenCL2.2, 具体每个版本的区别将在以后补充,可以参考
OpenCL wikipedia

我们需要了解CPU和GPU的区别,来理解为什么我们要在GPU上编程。可以参照这篇博客 https://www.cnblogs.com/qcloud1001/p/6617764.html.

在有了以上概念后,我们需要对OpenCL的框架有所了解。

OpenCL框架有四个模型,分别时平台模型、执行模型、内存模型以及编程模型。

平台模型

这里写图片描述

平台模型是异构平台的抽象模型,厂商将抽象的平台架构映射到具体的硬件,OpenCL框架+硬件设备组成平台模型。OpenCL框架是描述Host和Device之间如何进行数据交互的,我们不需要知道底层如何映射只需要按照其定义框架和对应API编程,则可以实现GPU编程。

执行模型

这里写图片描述
执行模型定义内核如何执行。OpenCL程序包含两部分,一是运行在OpenCL设备上的内核;二是宿主机上运行的主机程序。如平台模型所示,宿主机上的程序定义Kernel上下文以及管理如何运行内核。
当Host提交内核运行指令后,则生成一个索引空间,每个内核实例就运行在索引空间的点上,每个运行的示例就称之为Work-item工作项,则对应是Global ID。虽然工作项执行相同的代码,但是数据是不同的。
Work-item被分成不同的Work-group。可以看到,这个索引空间与GPU结构相近,执行模型则实现软件到硬件的映射,我们只需设定对应的参数(Global Size 以及workGroup Size)即可。

内存模型

这里写图片描述
内存模型描述内存区域怎样与平台模型联系在一起,描述定义的变量类型如何与GPU硬件对应,确定数据所在位置。
这里写图片描述

编程模型

OpenCL有两种编程模型一种是数据并行编程,一种是任务并行编程。编程模型定义了如何将并发模型映射到物理硬件上。
数据并行是指所有的数据运行同一条指令,只是输入数据不一样而已。任务并行是不管数据的输入形式,将算法分解为多个任务,任务之间并行进行。

猜你喜欢

转载自blog.csdn.net/yongtongguan9284/article/details/82084859