PowerVR架构与GPU管线
PowerVR架构是由Imagination Technologies开发的一种图形处理架构,广泛应用于移动设备中,尤其是在苹果的iPhone系列中。以下是对PowerVR GPU管线的详细分析,特别是关于TBDR(Tile-Based Deferred Rendering)和HSR(Hidden Surface Removal)处理的机制。
1. PowerVR GPU管线概述
-
历史背景:在A10之前的iPhone(如iPhone 7)中,使用的是Imagination的PowerVR GPU架构。从A11开始(如iPhone 8和iPhone XR),苹果开始使用自研GPU,虽然苹果可能获得了Imagination的授权,保留了一些PowerVR的特性,如HSR等。
-
架构特点:PowerVR架构的一个显著特点是其Tile-Based Deferred Rendering(TBDR)技术,这种技术通过将场景分割成小块(tiles)来优化渲染过程,减少内存带宽的使用。
2. TBDR与Parameter Buffer
-
Tiling过程:在TBDR中,首先将场景划分为多个小块(tiles),每个tile包含一部分场景的几何信息。Tiling的结果存放在Parameter Buffer中。
-
Parameter Buffer:
- 存储位置:Parameter Buffer位于系统内存中,大小有限。
- Flush机制:当Parameter Buffer填满时,硬件会进行Flush操作,以便继续处理后续的drawcall。这一过程可能导致性能下降,因为Flush前后的对象会进行两次HSR处理,即使存在遮挡也无法合理剔除,导致overdraw(过度绘制)增加。
-
性能影响:当Parameter Buffer填满时,可能会导致性能急剧下降,因此在场景设计时应尽量简化,避免出现这种情况。
3. HSR(隐面剔除)处理
-
HSR的工作原理:
- ISP单元:GPU通过ISP(Image Signal Processor)单元进行HSR处理。ISP负责处理深度回读(Visibility feedback)和隐面剔除。
- TagBuffer:HSR处理的结果存放在TagBuffer中,TagBuffer位于片上缓存中。通过TagBuffer,GPU可以确定最终需要绘制的片元,只有对屏幕产生贡献的像素才会被绘制。
-
HSR的优势:HSR是Early Z的完全替代品,能够在像素级别剔除被遮挡的片元,从而提高渲染效率。
4. AlphaTest对HSR的影响
- AlphaTest的作用:AlphaTest用于处理透明度测试,决定某些片元是否应该被丢弃。
- 对HSR的影响:
- 剔除判定:AlphaTest不会影响自身的剔除判定,但会对管线造成影响。具体来说,AlphaTest会打断ISP处理覆盖同一像素的几何体。
- 管线阻塞:ISP需要在执行HSR之前获得片元着色器(PS)的执行结果,因此在处理带有discard操作的片元时,所有覆盖这些片元的几何体都必须等待,可能导致管线阻塞。
总结
PowerVR架构通过TBDR和HSR技术优化了图形渲染过程,尤其是在移动设备上。Parameter Buffer的管理和Flush机制是性能优化的关键,而HSR则通过像素级的剔除提高了渲染效率。AlphaTest的使用虽然不会影响剔除判定,但会对管线的流畅性产生影响,因此在设计场景时需要谨慎考虑。理解这些机制有助于开发者在使用PowerVR GPU时优化性能和渲染效果。
PowerVR GPU硬件架构概述
PowerVR GPU架构,特别是Rouge架构,采用了一种独特的设计理念,旨在提高性能和能效。以下是对PowerVR Rouge架构的详细分析,包括其核心组件、缓存结构、ALU设计等。
1. Unified Shading Cluster (USC)
- 核心组成:PowerVR Rouge架构的GPU由多个Unified Shading Cluster(USC)组成。每个USC是GPU的核心,负责执行图形渲染任务。
- Pipeline结构:每个USC包含16条Pipeline,每条Pipeline又包含多个算术逻辑单元(ALU)。ALU是执行指令的实际单元,其数量是评估GPU性能的重要指标。
2. Texture Unit (TU)
- 共享机制:在PowerVR架构中,两个USC共享一个Texture Unit(TU)。这种设计可以有效地利用资源,减少硬件冗余。
3. 缓存结构
-
L1和L2缓存:
- 每个USC和TU都配备独立的L1缓存,以提高数据访问速度。
- MCU(Memory Controller Unit)则充当L2缓存,负责更大范围的数据存取。
-
Tile Memory:每个USC中还包含一块Tile Memory(片上内存),用于存储与Tiling相关的数据,进一步优化渲染性能。
4. ALU设计
-
FP16与FP32 ALU:
- 每个Pipeline包含4个FP16 ALU、2个FP32 ALU和1个SFU(Special Function Unit)。FP16和FP32的ALU是分开的,这种设计虽然占用更多芯片面积,但能显著降低功耗。
- FP16 ALU的速度更快,带宽占用更小,适合处理大量的图形数据。
-
Scalar ALU与超标量支持:
- PowerVR采用Scalar ALU架构,支持超标量(Super Scalar)设计,能够同时发射多条指令,充分利用空闲的ALU资源。
- 这种设计使得一个Pipeline内部的多个ALU能够高效协同工作。
5. Warp与Pipeline的关系
- Warp大小:PowerVR的Warp大小为32,但其Pipeline数量为16。这意味着在处理一个Warp时,PowerVR需要两个周期来完成。
- 性能优化:这种设计使得PowerVR能够在每个周期内高效地处理多个指令,尽管Pipeline数量相对较少,但通过ALU的高效利用,整体性能得以提升。
6. 与其他GPU架构的比较
- ALU数量:尽管PowerVR GPU的核心(USC)数量相对较少,但由于ALU数量较多,整体计算能力在同档次GPU中表现出色。
- 与NVIDIA的CUDA Core比较:NVIDIA的CUDA Core通常只有两个ALU(一个FP32 ALU和一个INT ALU),而PowerVR的设计则提供了更多的ALU,增强了并行处理能力。
总结
PowerVR Rouge架构通过其独特的Unified Shading Cluster设计、分离的FP16和FP32 ALU、超标量支持以及高效的缓存结构,提供了出色的图形处理性能和能效。尽管在核心数量上可能不及某些竞争对手,但通过ALU的高效利用和Warp处理机制,PowerVR GPU在移动设备和嵌入式系统中依然表现出色。理解这些架构特性有助于开发者在优化图形渲染和计算任务时做出更明智的选择。
Mali GPU架构概述
Mali GPU是由Arm公司开发的一系列图形处理单元,广泛应用于移动设备和嵌入式系统中。Mali架构的设计旨在提供高效的图形渲染和计算能力,以下是对Mali GPU管线及其关键组件的详细分析。
1. Mali GPU管线结构
- 并行管线:Mali GPU中有两条并行的管线:
- Non-Fragment管线:负责处理顶点着色器(Vertex Shader)和计算着色器(Compute Shader)。这一部分主要处理几何体的变换和计算任务。
- Fragment管线:负责处理片段着色器(Fragment Shader),主要用于计算每个像素的颜色和其他属性。
2. FPK(Fragment Processing Kernel)
- 隐面剔除:Mali GPU中的FPK负责隐面剔除(Hidden Surface Removal),该过程是在Early Z之后进行的。Early Z是指在片段着色器执行之前进行深度测试,以减少不必要的片段处理,从而提高性能。
3. Execution Core
-
WarpManager:在Execution Core中,WarpManager负责调度Warp的执行。Warp是指一组并行处理的线程,Mali GPU通过高效的调度来优化资源利用率和执行效率。
-
指令执行单元:Execution Core包含多个指令执行单元,主要包括:
- FMA(Fused Multiply-Accumulate):混合乘加单元,能够在一个操作中同时执行乘法和加法,适用于高效的浮点计算。
- CVT(Convert):类型转换单元,负责在不同数据类型之间进行转换。
- SFU(Special Functions Unit):特殊函数计算单元,处理如三角函数、对数等复杂数学运算。
4. SuperScalar支持
- 并行执行:在Valhall架构下,Mali GPU支持SuperScalar,这意味着上述三个执行单元(FMA、CVT、SFU)可以并行执行指令。这种设计显著提高了指令吞吐量和计算效率,使得Mali GPU能够在处理复杂图形和计算任务时表现出色。
总结
Mali GPU架构通过其并行的管线设计、有效的隐面剔除机制和高效的Execution Core,提供了强大的图形处理能力。WarpManager的调度和SuperScalar的支持使得Mali GPU能够高效地执行多线程任务,适应现代图形和计算需求。理解Mali架构的这些特性有助于开发者在优化图形渲染和计算任务时做出更明智的选择。
Mali GPU的其他技术
Mali GPU采用了一系列先进的技术来优化图形渲染和计算性能。以下是一些关键技术的详细介绍:
1. Forward Pixel Kill (FPK)
-
隐面剔除技术:FPK是Mali GPU的一种隐面剔除技术,通过Early Z阶段将片元放入一个FIFO队列中。如果后续的片元发现前面的片元被遮挡,则可以终止这些不需要绘制的片元。这种机制有效地减少了不必要的片元处理,避免了过度绘制(overdraw)。
-
Early Z的补充:FPK可以被视为对Early Z的硬件补丁,弥补Early Z在某些情况下的不足。尽管FPK可以提高性能,但它并不能保证所有被遮挡的像素都不会被绘制,因此Mali仍然推荐使用排序来充分利用Early Z。
2. IDVS (Index-Driven Vertex Shading)
-
顶点着色的拆分:IDVS将顶点着色过程拆分为两个部分:Position Shading和Varying Shading。通过先计算位置着色并进行裁剪,只有通过裁剪的图元才会执行varying shading。这种方法可以有效节省带宽,因为被裁掉的图元不需要获取各种属性和纹理。
-
带宽优化:将Mesh的position单独拆分为一个流(stream)可以显著降低带宽需求,尤其是在高通的Adreno架构中,LRZ技术的引入使得拆分位置着色带来了更大的收益。
3. AFBC (Arm Frame Buffer Compression)
- 无损压缩协议:AFBC是一种无损的帧缓冲压缩协议,旨在最小化SoC中不同IP块之间的数据传输。使用AFBC可以有效节省带宽并降低功耗,且对开发者是透明的。
4. Transaction Elimination
- 带宽降低技术:在某些情况下,只有部分Tile中的内容会发生变化。通过比较Tile前后渲染结果的CRC值,可以判断Tile是否变化。如果没有变化,则无需执行Tile到系统内存的写回操作,从而有效降低带宽占用。
5. Hierarchical Tiling
- 分层Tile选择:根据图元的大小选择合适的层级Tile,以降低Tiling阶段对主存的读取和写入开销。这种方法可以提高内存访问效率,减少延迟。
6. Shared Memory
- 缺乏共享内存:Mali GPU不支持共享内存,所有对共享内存的操作实际上是通过寄存器或主存实现的。这对OpenCL计算或Compute Shader的性能影响较大,而普通的Shader无法操作共享内存。
Adreno GPU架构概述
Adreno GPU是高通公司开发的一系列图形处理单元,广泛应用于移动设备。以下是Adreno架构的一些关键特性:
1. 核心架构
-
型号系列:Adreno 3xx、4xx、5xx、6xx是常见的型号,均为标量架构。3xx系列主要用于低配手机,5xx系列引入了LRZ技术,6xx系列则是近年来的新型号,630~660系列用于高配设备(如骁龙888)。
-
核心数量与GMEM:Adreno GPU的核心数量较少,但每个核心配备了较大的On-chip GMEM,大小可达256k~1M。例如,Adreno 630只有2个核心,但GMEM大小为1MB。
2. Flexible Render
- 动态切换渲染模式:Adreno GPU支持IMR(Immediate Mode Rendering)和TBR(Tile-Based Rendering)两种模式,并可以根据画面的复杂度在两者之间动态切换。尽管如此,在移动平台上,TBR仍然是更为高效的方式。
3. Low Resolution Z (LRZ)
- 隐面剔除技术:LRZ是Adreno 5xx系列引入的隐面剔除技术,通过先运行Vertex Shader的position部分生成低精度深度图,从而进行裁剪剔除。这种技术相当于在硬件级别实现了Hi-Z,能够精确到Pixel Quad。
总结
Mali和Adreno GPU各自采用了一系列独特的技术来优化图形渲染和计算性能。Mali的FPK、IDVS、AFBC等技术在带宽和性能上提供了显著优势,而Adreno的LRZ和Flexible Render则在动态渲染和隐面剔除方面表现出色。了解这些技术有助于开发者在不同平台上进行更有效的优化和开发。
总结
-
Warp大小:
- Mali GPU的Warp大小为16。
- PowerVR的Warp大小为32。
- Adreno的Warp大小未找到具体资料,推测为32。
-
架构类型:
- PowerVR、Adreno和Mali最新的Valhall架构均为标量(Scalar)架构,支持超标量(SuperScalar)特性,从而更好地利用算术逻辑单元(ALU)进行并行计算。
-
隐面剔除技术:
- PowerVR采用的是HSR(Hierarchical Z-Buffer)。
- Adreno使用LRZ(Low Resolution Z)技术。
- Mali则使用FPK(Forward Pixel Kill)技术。
-
Mesh处理优化:
- 将Mesh的position单独拆分为一个流(stream)有助于节省带宽,提高渲染效率。
-
Shader精度优化:
- 在Shader中使用mediump(半精度浮点数)可以更好地利用FP16的ALU,从而提升性能。
-
Tile大小与GMEM:
- Tile的大小与RenderTarget格式有关。Adreno的GMEM较大,因此其Tile大小通常比Mali和PowerVR的Tile要大得多。
结论
通过对Mali、PowerVR和Adreno GPU架构及其技术的比较,可以看出各自的优势和特点。了解这些信息有助于开发者在不同平台上进行更有效的优化和开发。