一、OpenCL背景和概述

OpenCL(全称Open Computing Language,开放运算语言)是第一个面向异构系统通用目的并行编程的开放式、免费标准,也是一个统一的编程环境,便于软件开发人员为高性能计算服务器、桌面计算系统、手持设备编写高效轻便的代码,而且广泛适用于多核心处理器(CPU)、图形处理器(GPU)、Cell类型架构以及数字信号处理器(DSP)等其他并行处理器。

二、内容简介

OpenCL是khronos集团开发和维护的一个开放的、免版税的异构系统跨平台并行编程标准。它的设计有助于开发人员利用现代异构环境中的巨大计算能力系统,极大地促进了跨平台的应用程序开发。

Snapdragon平台上的Qualcomm®Adrenotm GPU系列是最早完全支持OpenCL的移动GPU之一。

clot4架构 什么是clos架构_OpenCL


上图显示了支持OpenCL的典型异构系统。在这个系统中,有主要分为三个部分:

1)、一种主机CPU,本质上是管理和控制应用程序的控制者/主站。

2)、多个OpenCL设备,包括GPU、DSP、FPGA和硬件加速器。

3)、内核代码,由主机编译并加载到OpenCL设备上执行。

1、手机上的OpenCL:
近年来,片上移动系统(SOCs)在计算能力、复杂性和功能性方面都有了显著的提高。移动SOC中的GPU(mobile GPUs)非常强大,一些顶级的移动GPU在原始计算能力方面达到了控制台/离散GPU的水平。这给开发人员带来了挑战:如何在不了解GPU底层细节的情况下有效地利用计算能力并快速开发应用程序,同时保持不同SOC之间的应用程序兼容性?
OpenCL是为了解决这些问题而创建的,它的跨平台支持使开发人员能够轻松地利用移动SOC的计算能力。通过使用OpenCL,移动SOCs可以很容易地实现图像/视频处理、计算机视觉、机器学习等许多领域的高级用例。
在QTI中,使用OpenCL和Adreno GPUs成功地加速了许多用例,这些用例展示了优异的性能、功能和可移植性。强烈建议使用OpenCL和GPU来加速Snapdragon SOC的应用。
2、OpenCL标准:
OpenCL标准主要包含两个组件:OpenCL运行时API和OpenCL C语言。API定义了一组在主机上运行的函数,用于资源管理、内核调度和许多其他任务,而Opencl C语言则用于编写在OpenCL设备上执行的内核。
3、OpenCL C:
作为C99标准的一个子集,Opencl C语言用于编写内核,这些内核可以在设备上编译和执行。有C语言编程经验的开发人员可以很容易地开始使用OpenCL C编程。然而,理解C99标准和OpenCL C语言之间的差异对于避免常见的错误是至关重要的。以下是两个关键区别:
1)、由于硬件限制和opencl执行模型,opencl c语言不支持c99中的某些功能。例如函数指针和动态内存分配(malloc/calloc等)。
2)、OpenCL C语言在几个方面扩展了C99标准,以便更好地服务于其编程模型并促进开发,例如:
(I) 它添加了内置函数来查询OpenCL内核执行参数。
(II) 它具有图像加载/存储功能,可以利用GPU硬件。

三、总结

本篇文章主要对OpenCL进行了简单的介绍,包括其标准和C部分的相关内容,以及在Snapdragon平台和手机上的应用。