OpenCL 规范
OpenCL规范由四个模型组成,总结如下。
1. 平台模型:描述了协同执行的单个处理器(宿主机)及一个或多个能执行OpenCL代码的处理器(设备)。它定义了一个抽象的硬件模型,供编程(www.cppentry.com)人员用于编写能够在这些设备上执行的OpenCL C函数(称作kernel)。
2. 执行模型:定义了在主机上如何配置OpenCL环境以及如何在设备上执行kernel。这包括在主机端建立OpenCL上下文,提供主机-设备之间的交互机制,定义一个并发模型供在设备上执行kernel所用。
3. 内存模型:定义被kernel所用的抽象内存层次(memory hierarchy),无需考虑实际的底层内存架构。尽管内存模型十分接近当前的GPU内存层次,但同样也适用于其他硬件加速器。
4. 编程(www.cppentry.com)模型:定义了如何将并发模型映射到物理硬件上。
在通常情况下,我们可能看到使用GPU设备作为加速器的X86 CPU主机上执行的一个OpenCL实例。OpenCL平台模型定义了主机和设备之间的这种关系。以指定的并行度来实例化它,这就是执行模型。kernel内部的数据由编程(www.cppentry.com)人员分配到抽象内存层级中的指定位置。OpenCL运行时(runtime)和驱动程序将这些抽象内存空间映射到物理层。最后,借助于编程(www.cppentry.com)模型,必定是新建执行kernel的硬件线程上下文并映射到实际的GPU硬件单元。在整个本章中,我们将对此进行更详细的讨论。
本章首先介绍如何编写OpenCL kernel,介绍它们所使用的并行执行模型。紧接着,我们借助于向量相加实例来描述和演示OpenCL主机端API。向量相加实例的完整代码清单在本章结尾处给出。