OpenCL: getting started

==============================================================

目录结构

1、OpenCL设备整体连接图

2、OpenCL基本点与Host主机引导流程图

2.1 OpenCL设备

2.2 OpenCL编译方式

2.3 调用核函数方式

2.4 Host程序启动流程

3、参考

==============================================================

关键词:OpenCL启动流程

OpenCL明确地分为运行在主机(host)上的程序和运行在设备(device)上的程序两部分。运行在主机上的程序我们可以称为引导程序,运行在设备上的程序称为核。

主机将控制设备如何执行计算单元;

设备则是执行计算单元的环境,比如包括包含大量计算单元的GPU,DSP,CPU,以及支持OpenCL的FPGA设备等。

前文已有OpenCL示例的运行程序,本文将对OpenCL程序启动稍做总结。

扫描二维码关注公众号,回复: 6218268 查看本文章

1、OpenCL设备整体连接图
在这里插入图片描述
图1、OpenCL整体图

图1显示了编写OpenCL设备需要的所有关键部件。

首先需要OpenCL设备,诸如CPU,GPU。这些设备是执行核函数的地方。

其次,主机需要寻找OpenCL平台,创建程序(Programs,核函数的程序),创建核函数(Kernels,并为核函数设置相关的参数),创建内存对象(Memory Objects,有Images和Buffers类型),创建命令队列(对读/写内存,已经执行核函数等动作进行排队)。

图2、Altera OpenCL平台图(一)
在这里插入图片描述

图3、Altera OpenCL平台图(二)
在这里插入图片描述

图2、图3显示了Altera OpenCL平台连接图,主机代码编译完成后加载到主机内存,核函数代码编译完成后分别加载到主机挂载的OpenCL设备(此处是Altera FPGA),该FPGA设备和主机之间通过PCIe连接。

2、OpenCL基本点与Host主机引导流程图

在这里插入图片描述
图4、OpenCL基本点

2.1 OpenCL设备:前面已经提及多次,CPU、GPU、DSP和FPGA等。

2.2 OpenCL编译方式:此处区别指的是,编译的时候文件来源是核函数的源代码还是二进制文件。两种编译方式使用的函数不一样。如果没有核函数,则是已经编译好的二进制文件,这种方式的灵活性差,如果要匹配很多不同的OpenCL设备,则需要提供更多的不同版本的二进制文件,当然对于保护源代码有一定作用;如果有核函数的源代码,则使用时需要重新编译,需要多花费一点编译时间,但灵活性高,且用户需要修改源代码时方便。

2.3 调用核函数方式:分为数据并行和任务并行。数据并行使用的函数为clEnqueueNDRangeKernel,任务并行使用的核函数为clEnqueueTask。

2.4 Host程序启动流程:

   (1)获取平台(clGetPlatformIDs)

   (2)选择设备(clGetDeviceIDs)

   (3)创建上下文(clCreateContext)

   (4)创建命令队列(clCreateCommandQueue)

   (5)创建内存对象(clCreateBuffer)

   (6)主机数据写入内存(clEnqueueWriteBuffer)

   (7)读取核文件(open kernel sources)

   (8)创建程序对象(clCreateProgramWithSource)

   (9)编译(clBuildProgram)

   (10)创建核函数(clCreateKernel)

   (11)配置核函数参数(clSetKernelArg)

   (12)执行核函数(clEnqueueNDRangeKernelor clEnqueueTask)

   (13)从内存读取数据(clEnqueueReadBuffer)

   (14)释放对象(free all the objects in order)

此处需要了解各个步骤中函数的相关参数,每次启动流程类似。可能我们需要特别关注的是以上的(5)(6)(13)标红色的步骤,因为我们创建一个OpenCL设备是为了做加速运算,存储是OpenCL设备和主机之间的接口,数据首先需要从主机通过相关函数复制到OpenCL设备里,在设备内执行完数据后,主机又需要通过相关函数获取,这才得到我们想要的结果。

3、参考

参考书籍:《The OpenCL Programming Book》

如有错误,请您斧正,谢谢阅读。

作者:途次客
来源:CSDN
原文:https://blog.csdn.net/zhouxuanyuye/article/details/80037295
版权声明:本文为博主原创文章,转载请附上博文链接!

猜你喜欢

转载自blog.csdn.net/terri_yu2012/article/details/90168024