官网
OpenCL官网
OpenCL 3.0官网指南(在线)
简介
OpenCL(Open Computing Language)通过一种低级别、高性能、可移植的抽象,支持广泛的应用(包括:嵌入式、用户软件和HPC解决方案)。通过创建一个高效、接近硬件(close-to-the-metal)的编程接口,OpenCL形成了一个由独立于平台的并行计算生态系统的基础层。
OpenCL由API接口,跨平台的编程语言和一个中间表示组成。
特点:
名词的概念:
(详见官网词汇表)
Aplication:
在主机和OpenCL设备上运行的程序的组合。
Platform:
主机加上OpenCL框架管理下的若干设备构成了这个平台:
P l a t f o r m = h o s t + d e v i c e Platform = host + device Platform=host+device
通过这个平台,应用程序可以与设备共享资源并在设备上执行kernel。
Device:
官方的解释是计算单元(Compute Units)的集合。举例来说,GPU是典型的device。Intel和AMD的多核CPU也提供OpenCL接口,所以也可以作为Device。
Memory Object:
在主机和设备之间传递数据的对象,一般映射到OpenCL程序中的global memory。有两种具体的类型:Buffer Object(缓存对象)和Image Object(图像对象)。
Command Queue:
在指定设备上管理多个指令(Command)。队列里指令执行可以顺序也可以乱序。一个设备可以对应多个指令队列。
Context:
Platform上共享和使用资源的环境,包括kernel、device、memory objects、command queue等。一般一个Platform对应一个Context。
Kernel:
可以从主机端调用,运行在设备端的函数。
Program:
OpenCL程序,由kernel函数、其他函数和声明等组成。
(详见官网:The OpenCL Architecture)
我们将使用层次性的模型的来描述OpenCL背后的核心思想:
Platform Model
Memory Model
Execution Model
Programming Model