高通SNPE - OpenCL简介(2)

OpenCL的可移植性和向后兼容性

程序可移植性
作为严格定义的计算标准,OpenCL具有良好的程序可移植性。OpenCL的如果一个供应商的平台编写的应用程序应该在其他供应商的平台上运行良好,他们没有使用任何供应商专有或特定于平台的扩展或功能。Khronos的认证程序确保了OpenCL的程序可移植性,这要求OpenCL供应商在声称自己的平台通过了严格的一致性测试之前OpenCL“符合标准”。

性能可移植性
与程序可移植性不同,OpenCL性能通常不可移植。作为高级根据计算标准,OpenCL的硬件实现取决于供应商。不同硬件供应商具有不同的设备架构,每个厂商可能都有其优势,缺点。结果,为一个供应商的产品编写并优化了一个OpenCL应用程序平台不太可能具有与其他供应商平台相同的性能。即使对于相同的供应商,不同代的GPU硬件在架构和功能,可能会导致OpenCL的明显性能差异程式。结果,针对老一代硬件优化的应用程序通常需要进行微调以充分利用新一代的能力。

向后兼容
OpenCL完全具有向后兼容性,以确保可以在旧代码上运行投资新版本的OpenCL没问题。请注意,由于某些API函数可能已被弃用在较新的版本中,宏CL_USE_DEPRECATED_OPENCL_1_1_APIS或如果OpenCL 1.1或1.2需要定义CL_USE_DEPRECATED_OPENCL_1_2_APIS不推荐使用的API与OpenCL 2.x头文件一起使用。不保证将OpenCL扩展延续到新设备,因此应用程序使用扩展程序需要检查新设备是否支持它们。

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

在Snapdragon上使用OpenCLAdreno A3x,A4x和A5x GPU完全支持OpenCL,并且完全兼容符合OpenCL标准。OpenCL具有不同的版本和配置文件,以及不同的AdrenoGPU可能支持不同的OpenCL版本,除了OpenCL版本和配置文件的差异外,其他属性可能会有所不同跨Adreno GPU,例如受支持的扩展和图像的最大尺寸对象等。可以通过调用OpenCL API函数获得详细信息的完整列表。clGetDeviceInfo。

Adreno GPU架构

本节概述了与OpenCL相关的Adreno架构。

适用于OpenCL的Adreno高级架构
Adreno GPU支持许多图形和计算API,包括OpenGL ES,OpenCL,DirectX和Vulkan等。下图展示了Adreno A5x硬件的高级视图。OpenCL的体系结构,其中跳过了与图形相关的硬件模块。有A5x和其他Adreno GPU之间有很多差异,而对于OpenCL,差异是相对较小。
高通SNPE - OpenCL简介(2)
OpenCL执行的关键硬件模块如下:

  1. 着色器(或流式)处理器(SP)
  • Adreno GPU的核心模块。包含许多硬件模块,包括算术逻辑单元(ALU),加载/存储单元,控制流单元,寄存器文件等
  • 它执行图形着色器(例如,顶点着色器,片段着色器和计算着色器)并计算工作负载,例如OpenCL内核。
  • 每个SP对应一个或多个OpenCL计算单元。
  • Adreno GPU可能包含一个或多个SP,具体取决于GPU系列和层。低高端芯片组可能具有单个SP,而高端或高级芯片组可能具有更多SPSP。在图3-1,只有一个SP。
  • SP通过二级缓存为定义的缓冲区对象和图像对象加载和存储数据与__read_write限定符(OpenCL的2.0功能)。
  • SP从纹理处理器/ L1模块加载用于只读图像对象的数据。
  1. 纹理处理器(TP)
  • 根据内核的请求执行纹理操作,例如纹理获取和过滤。
  • TP与L1高速缓存结合使用,后者在存在纹理数据的情况下从UCHE获取数据缓存未命中。
  1. 统一二级缓存(UCHE)
  • 响应SP对缓冲区对象的加载/存储请求和L1缓存的数据加载请求用于图像对象。