opencl是针对在异构系统上进行跨平台程序并行的开源标准,而高通的骁龙平台上使用的高通Adreno GPU系列是最早全面支持opencl的手机GPU之一。
image.png
上图是可以大概概况出一个典型的基于OpenCL的异构系统,包括3个部分:CPU作为一个控制中心管理和控制应用程序;GPU、DSP、FPGA、硬件加速器作为OpenCL的设备;CPU编译kernel代码,传送到OpenCL设备中执行。
OpenCL标准由两个方面:OpenCL的实时运行的API和OpenCL的c语言规范(就是.cl文件)。API定义了一系列运行在Host上的函数,主要包括资源管理,内核分发(将kernel函数分发到不同的GPU上运行)以及许多其他的任务;OpenCL的c语言是用来写kernel函数的。
-
OpenCL平台层和实时运行层的功能
image.png - OpenCL的c语言
关于OpenCL的c语言主要要主要它与c语言的两个关键的不同点:
1、由于硬件的限制和OpenCL的执行模型,一些c的特性在OpenCL上是不支持的,比如函数指针,动态内存分配(malloc/calloc等)
2、OpenCL语言在默写方面扩展了c:OpenCL添加了内建函数来查询OpenCL内核的执行参数;为了更好的使用GPU硬件,添加了图片加载和存储函数。
网友评论