yuenshome / yuenshome.github.io

https://yuenshome.github.io
MIT License
81 stars 15 forks source link

Architecture of Qualcomm Adreno GPU #122

Open ysh329 opened 3 years ago

ysh329 commented 3 years ago

Adreno GPU architecture

image

ysh329 commented 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平台及相关应用程序的发布。

High-level architecture of the Adreno A5X GPUs for OpenCL

image

ysh329 commented 3 years ago

文档中,提供了一张Adreno A5X GPU在OpenCL的视角下的架构图。这个A5X系列我在网上还没找到,应该是比较老的一款Adreno GPU,按照文档的意思,虽然与其它Adreno GPU有不同,但在OpenCL的视角下,不同点很小,对其它Adreno GPU也是有普遍的参考意义的。

Adreno GPU的OpenCL API执行视角硬件模块架构图,其中主要包括4个硬件模块:

1. 着色器处理器(Shader / streaming processor, SP)

是Adreno GPU的核心模块,用于执行图形渲染任务,如顶点着色器、片段着色器、计算着色器,我的理解就是OpenGL、Vulkan的渲染任务,当然还有计算任务如执行OpenCL Kernels。

注:shader prcoessor是物理概念,而shader可理解为任务代码或(渲染)任务,或者说供sp(shader processor)执行的代码/任务,如fragment shader、vertex shader、compute shader,分别是片段任务(代码)、顶点任务(代码)、计算任务(代码)。其任务(代码)的执行由shader processor执行。SP再控制ALU去执行。

也正因如此,该核心模块包含的硬件模块有如:

  1. 算术逻辑单元(arithmetic logic unit,简称为ALU);
  2. load / store单元,应该对应于图上的Buffer和Image这两种类型的Read / Write(所对应的箭头);
  3. control flow unit;
  4. register file:类似ARM的寄存器,除去通用寄存器外,其余的一般有特定功能。比如说,在fragment shader里面要做sample,会通过配置对应register file。

Shader和ALU的关系

shader应该是供alu执行的机器代码,或者说供sp(shader processor)执行的代码,sp再控制alu。换句话说,其实这些各种各样的shaders(vertex shaders、fragment shaders、compute shaders)都是渲染任务的执行代码。 shader processor这个词里的shader,是任务,哦对可以理解为streaming,似乎可以说是任务,各种顶点、片段、计算的任务。

ysh329 commented 3 years ago

2. 纹理处理器(Texture Processor,TP)

ysh329 commented 3 years ago

3. Unified L2 Cache(UCHE)

响应 SP 对 buffer 对象的 load / store 请求,以及对 image 对象的 L1 cache 数据 load 请求。

ysh329 commented 3 years ago

Waves and fibers

Fiber

wave

ysh329 commented 3 years ago

Workgroup assignment

image

image

ysh329 commented 3 years ago

Latency hiding

ysh329 commented 3 years ago

Memory model

image

image