2024年7月4日发(作者:)
OpenCL™
简介
这篇
OpenCL™
简介简要剖析了
OpenCL 1.0
的三个主要部分,并举了一个简单的代码实例。本文不是
OpenCL 1.0
的详细说明
书。若要详细了解
OpenCL
,包括官方规范和
OpenCL
头文件,请访问
Khronos OpenCL API
注册表。
OpenCL 1.0
剖析
OpenCL 1.0
规范由三个主要部分组成:语言规范、平台层
API
和运行时
API
。
语言规范描述了编写计算内核的语法和编程接口,该计算核心可在支持的加速器上运行,例如
AMD GPU
和多核
CPU
。所用语
言基于
ISO C99
子集。
C
语言被选择作为第一种
OpenCL
计算内核语言的基础,因为开发人员普遍通晓这种语言。为了在各种
平台上产生一致的结果,人们针对所有浮点运算以及一套丰富的内建函数对
IEEE 754
的数值精度进行了明确定义。开发人员可
以选择预编译他们的
OpenCL
计算内核或者让
OpenCL
运行时根据需要编译他们的内核。
平台层
API
使开发人员可以访问可查询系统设备数目和类型的运行时。然后开发人员可选择必要的计算设备并对它们进行初始
化,以正确运行它们的工作负荷。用于提交工作和请求数据转换的计算上下文和工作队列就是在这一层创建的。
最后,运行时
API
允许开发人员排队执行计算内核,并负责管理
OpenCL
系统中的计算和内存资源。
表
1
,下表简要描述了
OpenCL
的各个部分。
表
1 — OpenCL
剖析
语言规范
基于C语言的跨平台编程接口
带语言扩展的ISO C99子集—开发人员通晓
经明确定义的数值精度—围绕IEEE 754的行为,定义了最大误差
在线或离线编译及创建可执行计算内核
包括一套丰富的内建函数
平台层API
置于各种计算资源之上的硬件提取层
查询、选择及初始化计算设备
创建计算上下文和工作队列
运行时API
执行计算内核
管理调度、计算和内存资源
执行模型
OpenCL
不仅以
GPU
为目标,还以其他加速器为目标,例如多核
CPU
,其指定的计算内核类型灵活多样。计算内核可被视为
数据并行型,该类型可与
GPU
架构完美匹配,或者被视为任务并行型,该类型可与
CPU
架构完美匹配。
计算内核是可执行代码的基础单元,可被视为类似于
C
语言函数。此类内核可按顺序执行也可不按顺序执行,具体取决于排队
执行内核时传递给系统的参数。提供了一些事件,以便开发人员检查未完成内核执行请求和其他运行时请求。
在组织方面,某内核的执行域由一种
N
维计算域定义。这使系统可以了解用户希望运用内核的问题有多大。执行域中的每个元
素都是一个工作项,
OpenCL
提供将工作项组合成工作组的功能,以便用于同步和通讯用途。
内存模型
OpenCL
定义了一种多级内存模型,涉及从仅单独计算单元可见的私有内存到设备上的所有计算单元均可见的全局内存这一范
围内的各种内存。不同内存空间可重叠在一起,具体取决于实际的内存子系统。
OpenCL 1.0
定义了
4
种内存空间:私有、局部、常数和全局。表
2
,下表显示了
OpenCL
定义的内存层次结构图。
私有内存是仅供单一计算单元使用的内存。这与单一计算单元或单一
CPU
核心中的寄存器相似。
局部内存是供工作组中的工作项使用的内存。这与当前一代的
AMD GPU
上提供的局部数据共享相似。
常数内存是指在内核执行过程中可用来存储常数数据,供设备中的所有计算单元进行只读访问的内存。主机处理器负责分配和
初始化驻留在此内存空间内的存储对象。这与
AMD GPU
上提供的常数缓存相似。
最后,全局内存是一种可供设备上的所有计算单元使用的内存。这与
AMD GPU
上提供的片外
GPU
内存相似。
表
2 — OpenCL
内存模型
简单示例
—
矢量加法内核
下文所述为用
OpenCL
写成的简单矢量加法内核。您可以看出,此内核指定了三个内存对象,两个用于输入,即
a
和
b
,一个
用于输出,即
c
。这些为驻留在全局内存空间内的数据阵列。在此例中,执行此内核的计算单元获得了其独有的工作项
ID
,并
使用此
ID
从
a
和
b
读入合适的值,再将两者之和存储到
c
中,以此来完成矢量加法部分。
因此在此例中,我们会使用在线编译,上述代码将被存储在名为
program_source
的字符阵列中。
为了补充计算内核代码,下方所示为在主机处理器上运行的代码,用于:
打开OpenCL上下文,
获得并选择执行设备,
创建命令队列,以接受并执行内存请求,
分配OpenCL内存对象以掌握用于计算内核的输入和输出,
在线编译及构建计算内核代码,
建立参数和执行域,
开始执行计算内核,以及
收集结果。
发布者:admin,转转请注明出处:http://www.yc00.com/news/1720035638a2759732.html
评论列表(0条)