泡泡网CPU频道 PCPOP首页      /      CPU     /      评测    /    正文

轻松读懂移动处理器 CPU微架构全解析

PowerVR 的渲染模式是 tile-based deferred rendering(分块式延后渲染)。

分块式渲染(TBR)并不难理解,就是把画面切成若干个 16x32 或者 16x16 的像素块进行渲染,这样的好处是可以在芯片上建立一个中间缓存(也可以称作 Tiler Buffer,分块缓存,里面用于存放当前渲染 Tiler(像素块)的深度/蜡版帧缓存、色彩帧缓存、渲染对象等),不再需要片外的显存来存放 Z-buffer,让渲染过程中的读写尽量在片上完成,减少内存的读写。

由于在中间缓存渲染的时候都是很高的精度(IEEE 32-bit),减少了以 16-bit(例如 R:G:B=5-bit:6-bit:5-bit)帧缓存模式时在内存上进行透明混合等操作时的精度损失,因此 TBR 可以较低的内存读写和占用实现高品质的输出。

ARM 的 Mali、当年 Bitboys 的 Glaze3D 都属于 TBR,不过也仅此如此,它们并非 TBDR,仍然属于 IMR(立即渲染器),只有有限的 HSR 能力(例如 Early-Z、Hi-Z 之类的技术),并不能完全消除无效渲染。

TBDR 是在上面的分块式渲染(TBR)基础上增加了对场景中当前屏幕画面三角形的筛选分仓(binning)的步骤,将三角形的前后位置关系标记起来并存放于片外的显存中,这样就能实现将不可见面在进入着色渲染流水线之前剔除掉,实现完全消除无效渲染。

由于增加了分仓动作,贴图和着色必须等待三角形可视性问题解决后才渲染,渲染上增加了时延,所以这种渲染方式被称作分块式延后渲染。

不过在 OpenGL 中缺乏专门的标记来指示一帧画面什么时候开始和结束,所以 TBDR 对一帧画面什么时候才接收到所有的三角形进行侦测将会有点麻烦,这会导致三角形分仓陷入迷失中。

在 Direct3D 中有 BeginScene() 和 EndScene() 这样的标记,但是由于在几乎所有的硬件上都没有效果,所以开发人员都会懒得去用这些标记并且随意地在这些界限外使用 z-buffer,这会导致 API 无法确保 z-buffer 中存放有效的数据。PowerVR 硬件本体虽然可以把 Z-buffer 存放在片外显存中,但是代码必须编写正确。

TBDR 可以减少无效渲染、实现极高的低内存占用渲染输出品质,但是它的缺点是需要做一块容量不小的片上缓存和大量的晶体管确保 TBDR 时候的兼容性,因此 PowerVR 的芯片面积一般都比 GeForce 这类 IMR(立即模式渲染器)大不少,另一个麻烦之处在于行销的时候,PowerVR 的纸面规格相当难看(当年 PowerVR3 就是搭配 SDR 作为显存上市的,而此时市场上的许多显卡都已经搭配 DDR 显存了),当然这个可以透过一些媒体测试实证加以解决。

轻松读懂“应用处理器”微架构 2013 版

上图是 PowerVR SGX54X MP4 的微架构图,这个系列中的 PowerVR SGX 543 MP4 曾经应用于苹果 iPad 3 中的 A5X 应用处理器中,MP4 表示它是以四内核形式组成的 GPU。

需要注意的是,PowerVR 说的内核是真正的内核而非 NVIDIA/AMD 那样的把单个 ALU 都当成 core 的市场行销术语,它这里的四个内核可以并行处理四个三角形渲染,NVIDIA 到了 Fermi(GTX 480)开始实现多三角形渲染,而 AMD 是在 Tahiti(7970)开始实现。

在 PowerVR 54x MP4 中,每个图芯渲染计算单元被称作 Multi-Threaded Co-Processor,对应 OpenCL 的术语就是 PE(Processing Element,处理部件)。每个 PE 每个周期可以完成两个浮点操作。

每四个 PE 构成一个 Pipe(渲染流水线,因此 Pipe 本质上就是一个四路 SIMD),每个 PowerVR SGX54X 内核包括四个这样的 Pipe,即 16 个 PE,故此 PowerVR SGX54X MP4 就有 64 个 PE。

因此如果 PowerVR SGX 54x MP4 运行于 300MHz 的话,浮点性能就是 38.4 GFLOPS。

即使是同一代的 PowerVR,不同的内核版本具体的实现细节都可能有些差别,例如 Pipe 内的 PE 数或者是每个内核内的 Pipe 数,例如 PowerVR SGX 554 MP4(Apple A6X 采用该 GPU)的每个内核有 8 条 Pipe 而非 PowerVR SGX 54x MP4 的四条。

PowerVR SGX 5 被设计成统一渲染结构,即几何体顶点和屏幕像素计算都是由上面说的 PE 执行,这样的好处是让 GPU 内的计算单元可以尽量保持运作状态,而不是像分离式架构那样遇到非平衡负载的处理时候,VS(顶点计算单元)有时候在等 PS(像素着色计算单元)或者 PS 在等 VS。

根据 PowerVR 的资料,SGX 54X 的每个 Pipe 内有一个线程调度器(Thread Scheduler),每个线程调度器内有 16 个线程可供派发,每次可以派发其中的 4 个线程给下面的 PE 执行。

PowerVR SGX 5 系列中有明确的 API 支持规格的内核基本上都是支持 DX9.X,但是有一个特例,那就是 PowerVR SGX 545,可以实现 DX 10.1、OpenGL 3.2 支持。

如果资料没有错误的话,PowerVR SGX 5 的 ALU:TEX 比例为 2:1,即每两个 PE 就会配上一个纹理单元,因此我们这里的 PowerVR SGX 54x 单个内核具备 8 个纹理单元。

虽然说 PowerVR 微架构的资料并不是很多,但是相对于除了 Intel 的其他对手而言,已经是非常大方了。

2人已赞

关注我们

泡泡网

手机扫码关注