一、概述
- 当单核处理器因为功耗和指令级并行的问题导致其性能达到瓶颈,为了提供更高性能的处理器,多核和向量化的处理器开始发展。想要充分利用多核和向量化的计算能力,必须要写向量化和多线程的代码。C语言程序扩展——CUDA、OpenCL通过层次化的线程/编程模型是的一份代码同时支持向量化和多核。目前它们已经被应用于GPU的异构计算中,其中OpenCL还支持X86 CPU、ARM和部分移动端的处理器。
- CUDA由NVIDIA推出,成为计算统一设备架构(Computing Unified Device Architecture)。CUDA由NVIDIA一家设计,未被Intel和AMD接受,所以CUDA目前只支持NVIDIA GPU。
- OpenCL称为Open Computing Language,由Apple提出,是异构平台并行编程的开放的标准,也是一个编程框架。OpenCL包含两个部分,OpenCL C语言和主机端API、硬件架构的抽象。相比与CUDA,OpenCL的优点在于可以提供一种能在不同平台移植的编程方式。
二、什么是OpenCL
OpenCL是异构并行计算程序的工业标准,其异构并行计算框架可以划分为平台模型、存储器模型、执行模型和编程模型。
1.平台模型
关于OpenCL对硬件的抽象。
OpenCL的设备平台包含一个主机以及一个或多个OpenCL设备,每个OpenCL设备包含一个或多个计算单元,每个计算单元包含一个或多个处理单元。主机与OpenCL设备之间的信息传输主要通过PCIe总线。
2.执行模型
主机端程序运行在主机处理器上,主机端程序一命令的方式将内核程序提交到OpenCL设备上,OpenCL设备在处理单元上执行计算。OpenCL执行模型最重要的是上下文(context)、命令队列(command queue)、内核(kernel)。