Open ysh329 opened 3 years ago
Adreno GPU支持众多图形API和计算用途的API:
其实上面,虽然有对其主要用途的定义,但近些年端侧推理框架在GPU方面,如MNN,其GPU后端支持了OpenGL、OpenCL、Vulkan三个,NCNN支持的是Vulkan,TensorFlow Lite支持了OpenGL和OpenCL,但CL优先级高于GL。
不难看到,Vulkan和OpenGL虽也可用于高性能计算用途,但首推的还是CL,且在兼容性和支持平台上,CL更好一些。另外,长期来看Vulkan可能更有潜力。
OpenGL ES、OpenGL、Vulkan都是由Khronos Group制定,该组织是一个图形软硬件行业协会,关注图形和多媒体方面的开放标准,并长期专注于创立开放标准,免授权费的移动设备接口程序API, 用以实现多样化平台及设备上的高质量动态多媒体创作和加速。 所有 Khronos Group 成员均可为Khronos API规范的制定贡献其力量,均可在相关标准公开部署前拥有各个发展阶段的表决权,更可通过及早接触相关标准草案及顺应性测试加速其先进的3D平台及相关应用程序的发布。
文档中,提供了一张Adreno A5X GPU在OpenCL的视角下的架构图。这个A5X系列我在网上还没找到,应该是比较老的一款Adreno GPU,按照文档的意思,虽然与其它Adreno GPU有不同,但在OpenCL的视角下,不同点很小,对其它Adreno GPU也是有普遍的参考意义的。
Adreno GPU的OpenCL API执行视角硬件模块架构图,其中主要包括4个硬件模块:
是Adreno GPU的核心模块,用于执行图形渲染任务,如顶点着色器、片段着色器、计算着色器,我的理解就是OpenGL、Vulkan的渲染任务,当然还有计算任务如执行OpenCL Kernels。
注:shader prcoessor是物理概念,而shader可理解为任务代码或(渲染)任务,或者说供sp(shader processor)执行的代码/任务,如fragment shader、vertex shader、compute shader,分别是片段任务(代码)、顶点任务(代码)、计算任务(代码)。其任务(代码)的执行由shader processor执行。SP再控制ALU去执行。
也正因如此,该核心模块包含的硬件模块有如:
Shader和ALU的关系
shader应该是供alu执行的机器代码,或者说供sp(shader processor)执行的代码,sp再控制alu。换句话说,其实这些各种各样的shaders(vertex shaders、fragment shaders、compute shaders)都是渲染任务的执行代码。 shader processor这个词里的shader,是任务,哦对可以理解为streaming,似乎可以说是任务,各种顶点、片段、计算的任务。
2. 纹理处理器(Texture Processor,TP)
3. Unified L2 Cache(UCHE)
响应 SP 对 buffer 对象的 load / store 请求,以及对 image 对象的 L1 cache 数据 load 请求。
Adreno GPU architecture