摘要:介绍了近年来微处理器的关键架构和特征,描述了OpenCL提供的模型和抽象概念——OpenCL是针对这些架构的新的并行编程标准。
前言:OpenCL的产生(异构计算和并行架构的时代需求),解决的问题(支持异构计算,提供易于编程的API)和优势(可移植性、正确性)
OpenCL的编程模型:提供一种通用语言、编程接口、硬件抽象,用任务并行或数据并行计算加速应用程序(加速方式:任务并行或数据并行;编程接口:用于枚举的函数、上下文管理、内存设备管理、主从数据传输、OpenCL程序编译、内核函数及其他附属功能;支持离线或在线编译)。对指令集没有依赖,硬件的更新或改变不影响OpenCL的编译。
虽然OpenCL是范微处理器设计,但也要求匹配目标框架的编程习惯(底层硬件的性质可使一些编程策略比其他平台更合适)。
OpenCL编程模型以锁步方式执行指令。OpenCL定义了四种类型的内存系统:大型高延迟“全局”内存、小型低延迟只读 "常量 "内存、共享 "本地 "内存以及"私有 "内存或设备寄存器。本地存储器由全局存储器实现(高延迟),也可以使用片上SRAM或共享寄存器文件实现。
应用程序可查询设备属性,以确定可用计算单元和内存系统的属性,并相应地使用它们。应用程序启动前必须要先创建与设备对应的“上下文”,并将内存不足的设备排出在外(否则最大内存分配将受到能力最小的设备的限制)。
新创建的上下文在某些设备上不支持OpenCL运行时所需要的功能,这些设备就需要在上下文中移除。上下文