Adreno OpenCL Application Development(1)

耗尽温柔 提交于 2019-11-29 23:48:59

一、简介

OpenCL是Khronos集团开发和维护的一个开放的、免版税的异构系统跨平台并行编程标准。它的设计有助于开发人员充分利用现代异构系统中的巨大计算能力,极大地促进跨平台的应用程序开发。
Snapdragon平台上的Qualcomm®Adrenotm GPU系列是最早完全支持OpenCL的移动GPU之一。下图为Heterogeneous系统使用OpenCL框架图:
在这里插入图片描述
二、OpenCL On Snapdragon

Snapdragon是当今Android操作系统和物联网(IOT)市场中功能最强大、应用最广泛的移动平台之一。Snapdragon移动平台将一流的移动组件集中在一块芯片上,确保基于Snapdragon的设备以极为节能的集成解决方案提供最新的移动用户体验。
Snapdragon是一个多处理器系统,包括多模式调制解调器、CPU、GPU、DSP、定位/GPS、多媒体、电源管理、射频、软件和操作系统优化、内存、连接(Wi-Fi、蓝牙)等组件。

1、 OpenCL在Adreno A3x、A4x和A5x GPUs上完全受支持,并且完全符合OpenCL标准。OpenCL有不同的版本和配置文件,不同的Adreno GPU可能支持不同的OpenCL版本,如下图所示:
Adreno GPUs with OpenCL support
在这里插入图片描述
除了OpenCL版本和配置文件的不同之外,Adreno GPU还具有其他不同的属性,例如支持的扩展名和图像对象的最大尺寸等。通过调用OpenCL API函数clGetDeviceinfo,可以获得详细信息的完整列表。

2、面向OpenCL的Adreno A5x图形处理器的高层体系结构:
在这里插入图片描述
Adreno GPU支持许多图形和计算API,包括OpenGL ES、OpenCL、DirectX和Vulkan等。上图展示了OpenCL的Adreno A5X硬件体系结构的高级视图,其中跳过了与图形相关的硬件模块。A5x与其他Adreno-GPU有许多差异,而OpenCL的差异相对较小。

3、在Adreno GPU中,最小的执行单元称为光纤。一根光纤对应于OpenCL中的一个工作项。一组始终在锁定步骤中执行的光纤称为波。SP一次可以容纳多个活动波。每一波通常都能独立向前推进,而不管另一波的状态如何。
延迟隐藏是gpu高效并行处理的一个最强大的特性,它使gpu能够实现高吞吐量。下面是一个例子:

  1. SP开始执行第一波。
  2. 在几个ALU指令之后,此波需要来自外部存储器(可能是全局/本地/专用存储器)的额外数据才能继续,这是不可用的。
  3. SP发送此波的数据获取请求。
  4. SP将执行切换到准备执行的第二波。
  5. SP继续执行第二波,直至外部依赖性尚未就绪。
  6. 如果第1波的数据可用,SP可以切换到第3波,或者切换回第1波。
    这样一来,SP大部分时间都很忙,工作起来就像“全职”一样,因为延迟或依赖关系可以很好地隐藏起来。

4、典型的OpenCL内核启动多个工作组。在Adreno GPU中,每个工作组被分配给一个SP,每个SP通常一次处理一个工作组。其余的工作组(如果有的话)在GPU中排队等待执行。
联合访问是OpenCL和GPU并行计算的重要概念。基本上是指底层硬件可以将多个工作项的数据加载/存储请求合并为一个请求,从而提高数据加载/存储效率的情况。如果没有联合访问支持,硬件必须对每个单独的请求执行加载/存储操作,从而导致性能低下。

三、总结

本篇文章主要介绍了OpenCL在Snapdragon上进行应用程序开发时的部分内容,大家有兴趣的可以相互探讨交流。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!