OpenCL背景和概述
OpenCL由Khronos集团开发和维护,是一种开放且免版税的标准用于异构系统中的跨平台并行编程。它是帮助开发人员利用现代异构中可用的海量计算能力系统,极大地促进了跨平台的应用程序开发。高通®的Adreno TM上的Snapdragon平台GPU系列一直是最早移动的一个完全支持OpenCL的GPU之一。
图中显示了支持OpenCL的典型异构系统。在这个系统中,主要分为三个部分:
- 主机CPU本质上是一个命令器/主设备,用于管理和控制主机应用。
- 多个OpenCL设备,包括GPU,DSP,FPGA和硬件加速器。
- 由主机编译并加载到OpenCL设备以执行的内核代码。
手机上的OpenCL
近年来,移动芯片系统(SOC)在计算方面取得了显着进步功能,复杂性和功能。移动SOC(移动GPU)中的GPU非常功能强大,某些顶级移动GPU在以下方面达到了控制台/离散GPU的水平:原始计算能力。这给开发人员带来了挑战:如何有效利用计算能力和在不了解GPU底层细节的情况下快速开发应用程序,而维护不同SOC之间的应用程序兼容性?为解决这些问题而创建的OpenCL使开发人员可以轻松利用计算能力得益于其跨平台支持,移动SOC的数量有所增加。通过使用OpenCL,移动SOC可以轻松实现启用许多领域的高级用例,例如图像/视频处理,计算机视觉,机器学习等在QTI中,使用带有Adreno GPU的OpenCL已成功加速了许多用例,表现出出色的性能,功能和便携性。强烈建议将OpenCL与GPU结合使用可加速其在Snapdragon SOC上的应用。
OpenCL标准
OpenCL标准主要包含两个组件,即OpenCL运行时API和OpenCL C语言。API定义了一组在主机上运行的资源功能管理,内核分发和许多其他任务,而OpenCL C语言用于编写在OpenCL设备上执行的内核。OpenCL API和OpenCL C语言将是在以下各节中进行了回顾。
OpenCL API函数
OpenCL API函数可以分为两类,平台层和运行时。下表总结了平台层的高级功能以及相对的运行时层级。
了解这两层对于编写OpenCL应用程序至关重要。
OpenCL C语言
作为C99标准的子集,OpenCL C语言用于编写可在设备上编译和执行。具有C语言编程经验的开发人员可以轻松开始使用OpenCL C编程。但是,了解C99标准和OpenCL C语言之间的差异,以避免常见错误。这是两个主要区别:∎由于硬件限制,OpenCL C语言不支持C99中的某些功能和OpenCL执行模型。示例是函数指针和动态内存分配(malloc / calloc等)。∎OpenCL C语言在几个方面扩展了C99标准,以便更好地进行开发。服务于其编程模型并促进开发,例如:□它添加了内置函数来查询OpenCL内核执行参数。□它具有可以利用GPU硬件的图像加载/存储功能。