OpenCL基础
零、概述
官网
OpenCL官网
OpenCL 3.0官网指南(在线)
简介
OpenCL(Open Computing Language)通过一种低级别、高性能、可移植的抽象,支持广泛的应用(包括:嵌入式、用户软件和HPC解决方案)。通过创建一个高效、接近硬件(close-to-the-metal)的编程接口,OpenCL形成了一个由独立于平台的并行计算生态系统的基础层。
OpenCL由API接口,跨平台的编程语言和一个中间表示组成。
特点:
- OpenCL需要显式地选择要使用异构平台
- OpenCL提供了两种层面的并行机制:任务并行与数据并行。
名词的概念:
(详见官网词汇表)
-
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函数、其他函数和声明等组成。
一、OpenCL架构
(详见官网:The OpenCL Architecture)
我们将使用层次性的模型的来描述OpenCL背后的核心思想:
-
Platform Model
-
Memory Model
-
Execution Model
-
Programming Model