文章目录
概述
OpenCL is a heterogeneous programming standard(异构平台并行编程的开放标准), 全称是open computing language, 即开放计算语言。同时,也是一个编程框架。
“使用OpenCL,开发人员可以编写在GPU上运行的通用计算程序,而无须将其算法映射到OpenGL或DirectX的3D图形API上。”
OpenCL标准
平台模型
OpenCL如何看待硬件。
通常主机是指包含X86或ARM处理器的计算平台。
OpenCL 设备 可以是CPU(也可以将主机端的CPU作为OpenCL设备)、GPU、DSP、FPGA或硬件商提供、OpenCL开发商支持的任何其他处理器。每个OpenCL 设备 有一个或者多个计算单元(ComputeUnits,CU),而每个计算单元又由一个或多个处理单元(Processing Elements,PE)组成,处理单元是设备上执行数据计算的最小单元。
执行模型
Quick Start
1. 搜索并选择OpenCL平台
2. 获得OpenCL设备;
通常需要调用两次(第一次获取设备数量,根据设备数量去申请内存,再用这块内存把对象结构体填充上,第二次获取设备)
opencl 设备类型
3. 创建上下文
两个函数用于创建上下文
函数1:
需要显式地指定设备来创建上下文。
函数2:
注意,指定设备类型来进行创建。
OpenCL命令队列
一个命令队列只能跟一个设备进行交互。
创建命令队列的代码:
4. 程序对象创建
opencl只是提供了跨平台实现的标准,真正的实现是由各大厂商来进行的,因此,有的设备不支持直接从opencl c代码进行创建,只能使用程序二进制代码进行创建,有如:
内核对象
程序对象只是个容器,是没办法直接运行的。
主要通过内存资源进行处理:
创建内存对象
使用内存对象对内核对象进行参数传递
例子:
内核函数一般都是通过C语言直接改变而来的,存在一些数据的依赖,这个时候往往会用以下的函数:
获取结果
5. 资源回收
回收顺序
OpenCL C
关键字修饰符
矢量数据
矢量数据的使用和访问
参考资料
- ulhpc-tutorials
- 极客笔记 (重点学习)