OPENCL编程学习

OPENCL编程学习

一、基本介绍

​ OPENCL(open computing language) 是一个工业级开放的异构编程标准,它同时提供了一个并行编程的框架和封装库,可以让编程人员编写高性能并且可移高的代码。

二、基础内容

​ 下面将从四个方面对opencl进行阐述,分别是基本框架、内存组织、执行模型、编程模型:

2.1 基本框架

opencl基本框架如下图:

在这里插入图片描述

关键字释义
Compute Device计算设备(GPU/ANIC/FPGA)
Compute Unit计算单元(类似gpu sm)
Process element计算单元(l类似gpu wrap) 设备执行的基本单元
HOST主机设备

2.2 执行模型

opencl执行模型图如下:

在这里插入图片描述

关键字释义
kernel在device端执行的程序
work-item在device端一个执行的kernel集合(类似cuda thread)
work-group管理work-items一个集合(类似cuda block)

三、内存组织

内存逻辑分布图如下:

​ [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kaGsmIwM-1617343931193)(D:\work\文档\openclMemory.png)]

关键字释义
global memory全局内存所有work-group中数据都是可见的
constant memory全局内存,但是在kernel执行的时候被创建为constant属性
local memory该内存只在work-group中可见,看设备实现有可能是global memory或者片内内存
private memory该内存只在work-item中可见,应该是register类似内存

四、编程模型

​ opencl支持的编程模型有两种数据并行和任务并行,对应的详细描述如下:

关键字释义
data parallelkernel对多个数据进行并行操作处理,相互数据见存在依赖性
task parallelkernel数据处理是独立相互间不存在依赖

对于data parallel 并行处理计算中数据同步是非常的必要的,opencl两种粒度方式的数据同步,对应的描述如下表:

名称同步粒度释义
work-group 同步work-group内work-group内的所有work-iterms同步
commands 同步(同一context)同一context下基于同一context下的commands间的同步(1. 同一队列内同步,2. 基于event的数据同步)

三、附录

3.1 名词解释

名字释义
OpenCL Platform layerThe platform layer allows the host program to discover OpenCL devices and their capabilities and to create contexts.
OpenCL RuntimeThe runtime allows the host program to manipulate contexts once they have been created.
OpenCL CompilerThe OpenCL compiler creates program executables that contain OpenCL kernels. The OpenCL C programming language implemented by the compiler supports a subset of the ISO C99 language with extensions for parallelism.
规约运算对一个输入数组执行某种算子,产生更小结果的中间数组,该过程就是规约S

3.2 OPENCL UML类图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OodV9Tny-1617343931196)(D:\work\文档\openclUml.png)]

符号释义
*多个
0…1没有或者有一个
1…*一个或者多个
->相互指导关系

连线双端表示相互间的数据映射关系和UML的逻辑关系,但是“->”不代表连线双端存在关系只是双端间的指导关系。

参考文档: opencl-1.2.pdf


版权声明:本文为zy562760942原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。