PowerVR —— 延后式分块渲染架构
ImgTec(或者说 Imagination Technologies)的前身是 1985 年在英国成立的VideoLogic公司,在上世纪90年风靡一时的世嘉DreamCast游戏机便是采取该公司技能授权生产的图形处理器。
ImgTec目前旗下有多个分部,PowerVR是个中专门从事GPU、视频处理单元、摄像机知识产权内核技能开拓的分公司。
PowerVR虽然从事GPU开拓,但是它并不直接售卖芯片实体,而是透过授权的办法,将芯片内核技能以收取权利金的办法让第三方芯片厂商生产、发卖、利用,例如苹果公司、英特尔公司、联发科、索尼等,商业模式和同样是英国公司的ARM一样。

技能内核授权办法给了芯片厂商和系统集成厂商非常高的灵巧性和快速切入市场的能力,他们可以在较短的韶光里就实现各种配置的灵巧组合。如果你看过我前面先容的图形流水线就知道,要做好一枚具竞争力的GPU难度是相称大的,中间涉及大量的技能积累。
像NVIDIA、AMD这样的厂商都不是溘然冒出来的,他们都经历过非常惨烈的市场竞争、有业界最强大的研发团队以及与周边软件开拓商经年累月的开拓互助关系,现在一个新丁公司仿效NVIDIA模式贸然闯进GPU开拓领域的话,如果不是手握十亿美元级规模的资金来换取技能和各种市场资源的话,恐怕连响都听不到。
在上世纪90年代末和本世纪前两年,PowerVR也在桌面市场和NVIDIA、3dfx进行过捉对厮杀,不过由于商业模式并不十分适宜桌面市场,以是在仅有母公司VideoLogic(1999年更名为Imagination Technologies)推出的Kyro II后就不再踏足桌面独立显卡市场,转而全力发展嵌入式领域,从此一发不可整顿。
PowerVR在桌面独立显卡市场的末了一款产品是PowerVR3系列,原定用于Kyro III/IV的后续产品PowerVR4由于退出桌面市场,对公众年夜众而言只勾留在幻灯片(上图的STG5000便是原来操持用在Kyro III的PowerVR4)中。
当然,PowerVR并没有完备退出桌面市场,他们和Intel达成了技能授权协议,英特尔可以在其集成GPU中采PowerVR MBX架构,英特尔在很长的一段期间内的集成GPU都采取了这个微架构内核。
PowerVR MBX据闻是世嘉DreamCast那枚PowerVR PCX 2的升级版,从技能资料来看的话,实在PowerVR MBX有些类似于PowerVR4,官方的PowerVR MBX白皮书里也明确写着:
4th generation tile-based deferred rendering(第四代块元式延后渲染)
从规格表来看,PowerVR MBX支持OpenGL ES 1.1,相称于OpenGL版本1.5或者DirectX 8.x的变种版。
以是,PoweVR MBX该当是和PowerVR Series 4一脉相承的,PowerVR MBX属于后者的移动版本。
什么是TBDR呢?
在前面先容的图形渲染流水线,GPU在渲染的时候,一样平常是逐个三角形渲染的,如果以深度顺序来划分,可以分为从远到近(画家画法)、从近往远,开拓职员可以在编写代码的时候指定渲染顺序。
如果依照在图形流水线什么阶段进行三角形排序,又可以分为sort-first、sort-middle、sort-last,middle是中间的意思,指的是从模型空间到屏幕空间这部分工位,sort-middle便是指在这段进行三角形前后顺序排序。sort-last是指在这之后进行三角形排序,sort-first是指在这之提高行三角形排序。
Sort-First一样平常用于多GPU渲染方案,基于片元办法的Sort-Last在目前绝大多数的GPU微架构中利用,而Sort-Middle则是PowerVR的三角形排序方案,须要在几何变换和光栅化之间进行图元的排列/分仓处理,在办理了可视性问题后再进行贴图和着色处理。
这个步骤会造成一定的延迟,加上采取了块元式渲染,以是像PowerVR这种渲染架构被称作块元式延后渲染器(Tile Based Deferred Rendering,TBDR)。
而一样平常的GPU被认为是看到一个三角形就立时渲染,以是被称为立即渲染器(Immediate Mode Rendering),立即渲染器也可以分为块元式(例如ARM Mali)和非块元式(例如AMD、NVIDIA “目前”的GPU)。
(IMR)
什么是TBDR?
PowerVR 微架构出身于上世纪90年代初期,针对的是初代的三维游戏机,当时的人们希望这枚芯片的效率要尽可能地高,由于受到半导体技能的限定,以是在这期间有各种现在看来稀奇古怪的侧重于某个技能指标的芯片。
要效率高,个中一个办法便是只渲染屏幕上能看到的三角形所覆盖的片元,人们引入了名为HSR(Hidden Surface Removal,隐面肃清,这里的隐面是指被其他实体多边形遮盖的多边形)来肃清无效片元来实现这个目标。
(TBDR)
在TBDR的渲染流水线里,几何阶段天生(已经经由裁剪)的多边形或者说三角形参数信息都存放在一个名为Scene Buffer(场景缓存)或者Parameter Buffer(参数缓存,这是相对新近的叫法)的内存里,理论上里面保存的该当是同一帧画面里的所有三角形信息,其位置在显存里(对付采取统一内存架构的手机而言,则是和系统内存一样位于同一块物理内存上)。
这一步是TBDR独占的,相较之下,传统的GPU在几何阶段扔出到三角形后纹理单元/着色单元就立时渲染,因此人们将传统的GPU渲染办法称作立即渲染器。
这里请不要把TBDR 和延后式渲染稠浊,后者是指把多个片元渲染后在进行后期处理(例如打光、模糊等效果),同样是“延后”一词,但是对应的渲染节点完备不一样。
在天生Scene Buffer的同时,PowerVR GPU内部的块元加速器会对这些三角形进行分仓(Binning)或者说筛选(sorting)处理,这个动作会依照16像素16像素(取决于详细的GPU实现,像PowerVR PCX2可以是3232或者3216,PowerVR SGX 5上是1616,“新的”PowerVR Series 6/7是3232,这样的分块被称作块元,即Tile)的大小,将Scene Buffer中位于块元内的所有三角形的指针存放到一个对应的块元缓存(Tile Buffer)中。
对付一个大小为1920x1080的全高清屏幕,用1616的块元大小进行切分,可以切成大约8100个块元,每个块元在“显存”中都有一个对应的块元缓存,里面存放的便是上面所说的位于块元内的三角形数据指针(指向Scene Buffer对应的三角形数据)。
所谓指针,是编程措辞中的一个工具或变量,用来存储某一个地址,这个地址的值直接指向(points to)存在电脑存储器中另一块存储器空间的值。
从编程的角度而言,在这些块元缓存存放的数据构造可以称作图元列表(primtive list)。
按照PowerVR或者说ImgTec的说法,他们在新的微架构中引入了几何体压缩技能,存放在Scene Buffer的几何体数据是压缩过的,在GPU顶点内存单元读取时候再解压,这样的好处是可以显著节省存放Scene Buffer的内存空间和带宽,而这常日意味着:省电。
TBDR是如何实现HSR的呢?
不过几何体压缩并非TBDR的卖点,TBDR的真正卖点是可以实现完备肃清不可见三角形的片元渲染,那么它是如何做到这一点的呢?
(Kristof Beets)
根据现在供职于ImgTec担当商业开拓总监的Kristof Beets在 2001年(就在这一年他加盟PowerVR,任职开拓者关系折衷工程师,该文彷佛是他在PowerVR演习期间撰写的)的一篇文章,PowerVR的HSR实现办法该当是这样的:
1、从Tile Buffer中得到第一个指针,基于这个指针就能拾取到Scene Buffer中所有三角形的数据。
这一步可以实现预拾取并将数据存放在一个GPU的片上缓存里,这个高速缓存可以称作为On-Chip Tile buffer(片上块元缓存),用作差异于片外的图元列表Tile Buffer,虽然都是块元缓存,都是对应1616个像素,但是存放的东西完备不一样(一个是从指针解引用后得到的三角形数据和打算好的深度值,另一个则是图元列表)。
2、利用这个三角形的数据打算出被该三角形覆盖的Tile中每个像素的Z值(深度值)。
3、这些深度值数据以及对应于第一个三角形的指针被一起存放在GPU内的高速缓存里。
4、重复上面的步骤,得到第二个三角形的数据以及该Tile中被其覆盖的像素的深度值,对第二个三角形覆所盖像素的深度值和第一个三角形所覆盖像素的深度值进行比较,如果新的深度值更靠近于视口(表明是可瞥见的),就更新深度值以及三角形(指向新的三角形)。
5、重复上述的步骤,直到覆盖该Tile的所有三角形数据以及深度信息更新完毕。
6、此时,GPU的片上高速缓存存放的便是用于确定像素色彩的三角形。
前面的Scene Buffer以及Tile Buffers都是存放在GPU外的,而上面步骤中绝大部分操作都是GPU内部的高速缓存上进行的(除了从Scene Buffer中载入该块元的三角形数据外),速率会非常快。
渲染一个块元需时256个周期(根据Kristof Beets文章提到16x32的块元需时512个周期推算):
1、数据拾取可以采取流水线构造,因此不存在性能惩罚;
2、筛选(打算Z值)需时一个周期,这个步骤也可以采取流水线构造,每个三角形的检讨和块元更新可以在一个周期内完成。
因此除非时涌现极度状况,256个周期的渲染韶光是可以粉饰掉块元中含有256个三角形实行筛选动作的耗时,在一个16x16的块元内涌现256个三角形的情形目前来说该当还是很少见。
按照这样的思路可以推算出 1920x1080 60FPS下能实现的每秒三角形筛选能力是:
1920x1080 60FPS = 124,416,000 Mtriangles/s
根据上面的算式可以得出在像PowerVR SGX 5上每个块元含有高达256个三角形的情形下,要知足60FPS速率时的三角形筛选个数为124百万三角形,现实的游戏中险些没有这样的情形会涌现,由于目前的制程无法做到一个全程胜任这个三角形规模真实游戏的移动GPU。
在有名的三维性能测试软件3DMark里有一个支持在手机上进行测试的icestorm场景,其三角形规模在Extreme模式时候的为每帧28,000个,达到60FPS时便是每秒1.68百万三角形/秒,对付手机来说这个测试已经算是比较严苛了,但是此时三角形规模也便是每个块元大约3.5个三角形,远远低于每周期256个三角形的处理能力。
PowerVR的渲染
完成块元渲染后,在块元帧缓存中的数据会被写入到显存(在手机中常日显存和系统内存共享)中。在这个写入动作实行的时候,会一并实行抖动操作(只实行一次而非多次)。如果在台PC上,如果指定了超取样抗锯齿,在这一步还会实行一个向下取样的操作,将画面缩小到指定的屏幕分辨率。
在完成了一个块元的渲染后,这个块元的像素会被传输到显存(对付采取一体内存架构的移动设备来说,这块显存是从主内存等分配的)。
然后,GPU连续下一个块元的渲染,直到整帧画面渲染完毕后,以双缓存办法运作的Scene Buffer开始把下一帧的块元递交给渲染单元实行后续工位处理,周而复始。
相较于非TBDR的GPU微架构来说,PowerVR或者说TBDR能对全体画面(场景)进行判别,确定哪些三角形覆盖的片元须要渲染,而“传统”的立即渲染架构无法实现这一点。
Kristof Beets的原文还先容了infinite plane(无限大平面)和HSR的关系,所谓的infinite plane并不难明得,你可以想象一下:在一个三维空间里存在着一块无限大的平面,这块平面显然会把这个三维空间一分为二。
如果我们在这个三维空间多弄几个这样的平面并使其相交,也就可以构建出一个几何体模型出来了(例如只要六个相交的无限大平面就能布局出一个多边形数很少的立方体)。
这样的建模技能和常见的三角形建模是有很大差异的,以是很难找到得当的建模工具,其运用非常受限,而且随着模型越来越繁芜,无限大平面的上风也就没啥觉得了(在Youtube上有一段采取PowerVR PCX2渲染一个由35个无限大平面构建的甜甜圈的视频,帧率只有47 fps),三角形此时是更合理的选择。
好好的三角形不用,为啥要折腾这个无限大平面呢?可能的缘故原由是在当时看来,这样的技能可以节省在Scene Buffer里要存放的三角形数:
在几何阶段,PowerVR会根据从视点发出的一条“丈量光”确定最前和末了的平面相交点,藉此得出一个渲染打算约束椎体(effect volume),使得这些无限大平面变成有限的平面,加上隐面肃清技能,几何体外突出的平面也被消隐掉。
较少的多边形、可以和TBDR的隐面肃清技能完美合营,于是无限大平面建模的合理性也便是以存在了。
听说在PowerVR Series 2往后就不在支持无限大平面,目前为止只有世嘉 DreamCast中的那枚PowerVR芯片是具备无限大平面建模能力的图形芯片,以是无限大平面这个部分我们完备不须要考虑,这里先容紧张是为了强调一下 PowerVR的特点——近乎完美的隐面肃清能力(如果不涉及阿尔法稠浊、阿尔法测试的话,由于这两项操作会导致HSR失落效)。
我们上面费了很多口舌来阐述PowerVR的最紧张特色TBDR,接下来就让我们说说当前以及即将推出的PowerVR GPU到底会长成什么样子。
ImgTec PowerVR Rogue
ImgTec在2012年发布了名为PowerVR Rogue的第六代PowerVR微架构,现在市场上许多手机里的GPU都是基于该微架构的变种,例如红米Note 3/Note2、魅蓝 Metal、魅族 MX5里的PowerVR G6200。苹果iPhone 6s Plus的GPU经由各种验尸手段查证后确认为PowerVR GT7600,这个GT7600被PowerVR定义为第七代PowerVR(PowerVR Series 7 或者 Rogue 7)微架构。毫无疑问,不论档次高低,现在许多手机、平板电脑中都有基于PowerVR的GPU。
ImgTec属于经营、开拓知识产权的芯片公司,本身并不直接售卖芯片,透过研发大量芯片内核,然后将其授权给须要的第三方公司,收取授权金来坚持公司的运营,因此他们会弄一大堆内核,以知足不同厂商、市场的需求。
理论上这样的运管办法只牵扯到研发用度和市场拓展用度,弄一大堆内核IP的并不会造成实体产品那样的库存压力。
ImgTec在2012年发布了代号Rogue的PowerVR Series6微架构,最低真个是G60X0和G61X0(x为个中一个数字编号,不同编号型号配置均不一样),对应的D3D规格只能够支持DX9特性级别。
在型号的含义方面,G6050里有0.5个正常规格的USC(通用着色器簇),61X0 里含有1个USC。USC 是PowerVR Series 6引入的统一着色簇简称,差异于以往的PowerVR Series 5时候的USSE。
前面我们所说的TBDR是指渲染流程的办法,而通用着色器簇则是指详细微架构里将多少个打算、贴图部件绑定在一起的单元,一个USC 就类似于CPU中传统观点上的一个内核,正如我们前面所说的,它对应的便是通用打算标准OpenCL中的术语便是Compute Unit。
下图是PowerVR最新的PowerVR Series 7XT的微架构图:
GPU厂商在设计GPU的时候都会把延伸性作为主要的设计成分,由于这样能确保软件、硬件资源的最充分利用,上图的USC规模可以依据详细的运用情形作调度,例如iPhone 6s采取的GT7600就具备6个USC(或者说6个CU)。
上图的PowerVR Series 7XT属于目前ImgTec最强大的GPU微架构,苹果公司的iPhone 6s列便是采取基于该GPU微架构的GT7600。
作为PowerV RSeries 7的GT7600,供应了FP16(半精度)的原生支持,以是如果程序采取了FP16的话,性能会较FP32快一倍,对付手机运用来说,FP16 供应了10位的有效值和5位的指数,是可以知足许多情形下的图形渲染打算的需求。
要精确利用这类FP16须要比FP32更多的技巧,像当年NVIDIA的NV3X就供应了FP32 + FP16设计,但是在和AMD R300的性能竞争中一贯处于下风,坚持NV3X拉力的紧张靠NVIDIA和各个游戏开拓商紧密的互助关系。
上表中的GFLOPS指标是指GPU打算单元运行于1GHz时候的情形,不过我们目前尚未有可靠的iPhone 6s系列GPU运行频率规格,wiki百科上写的苹果A9 GPU为450MHz(此时的单精度浮点性能是172 GFLOPS)或者533MHz也只能是参考。
根据GFXBench的ALU测试结果,iPhone6s Plus(GT7600,6 USC)是 12781fps,iPhone6 Plus(GX6450,4 USC)是5847 fps,这意味着前者的打算性能是后者的两倍旁边,考虑到ImgTec曾经表示PowerVR Series 7XT浮点性能在同频、同规模下的性能是PowerVRSeries 6XT 1.6 倍,这个测试结果表明iPhone 6s Plus的GT7600频率很可能和iPhone 6 Plus的GX6450相称。
业界也有人认为iPhone 6s系A9采取的并非GT7600,缘故原由是开拓文档缺少一些PowerVR Series 7XT存在的Tessellation等特性以及采取Metal作为API,这实在由于PowerVR的授权本来就许可厂商自行定制驱动,像 Intel的GMA系列GPU就没有开放TBDR这样的PowerVR最核心技能,而且Tessellation对付这个级别的GPU而言意义也不是很大(有多少人用过iPhone 6 GX6450里的那个Tessellation?),以是不必太为此纠结。
下表是常见的PowerVR Series 6 GPU规格表,浮点性能部分依旧因此1GHz频率为参考。
个中的G6200目前在诸如红米Note2/Note 3、魅族 MX5、魅蓝 Metal、索尼 Sony Xperia M5/M5 Dual、亚马逊Fire HD 8/10等智好手机和平板设备中采取,尤其是前三者,目前在市场上属于比较火的产品。
以红米Note 2为例,标准版的G6200频率是550MHz,增强版是750MHz,单精度性能分别是42 GFLOPS和57.6 GFLOPS,和iPhone 6s的150+GFLOS显然是有明显差距的,从GPU的角度而言,搭配G6200的设备在运行重度三维游戏的时候会明显比iPhone 6s慢,以GFXBench为例,各项测试结果差距在3倍到13倍旁边。
例如在离屏模式下,1080p算术逻辑单元2测试结果红米Note 2是 749.4 frames,iPhone 6s是 3824 frames,大约是5.1倍,这意味着iPhone 6s GPU的浮点性能是214 GFLOPS旁边,推算出来的iPhone 6s GPU频率是550MHz到600MHz旁边(假设 Metal API 版渲染动作、精度都是和OpenGL ES版本是一样的)。
在2016年,我们预期会看搭载到比GT7600快靠近一倍的顶配PowerVR GPU手机产品。目前手机 AP(运用场置器)还基本能按照摩尔定律高速发展,行业的增长势头还算是比较乐不雅观,厂商有足够多的资金用于制程的而研发改进,例如对16nm/14nm制程进行改进,降落功耗,适当增大电池容量,对微架构进行调优以及内存技能的变革,都有望增加实现速率提升一倍的机会。
上图是ImgTec日前发布的PowerVRSeries XT 7 Plus,顾名思义,它是PowerVR Series XT 7 的加强版,紧张加强的地方包括:
增强整数单元的单元数和灵巧性,例如每个个中的两个32位整数单元可以同时实行8个8位整数操作,这对付OpenCV这类可视化打算来说是有不少好处的。
首次实现了OpenCL 2.0的支持,CPU和GPU可以在同一块虚拟内存上运作,编程的时候内存指针不须要再作严格区分。
增加了动态并行化功能,可以在无需GPU干预的情形下创建新的GPU线程。
新增了一个2D图片处理数据前端,紧张用于不涉及几何和块元的处理,适宜做二维以及图片处理运用。
不过按照ImgTec的说法,PVR SXT7 Plus须要到2017年才有望看到,当然,我们不用除不才一代iPhone或者iPad上涌现PowerVR Series 7。
中低端方面GPU的提升有可能会更激进一些,假设今年的中档手机也是搭配 MT6795的制程升级版,可以预期GPU也会得到相应的提升,在保持同样功耗的情形下,GPU有望升级至G6430等级(150 GFLOPS)。
高通Adreno系列——ATI血脉
相较于ImgTec而言,高通公司在GPU方面的耕耘实在是有一定差距的,在缺少秘闻的情形下,一家土豪型的公司最大略、最直接的收购,而工具则是AMD的Imageon。
虽然说是AMD的Imageon,但是Imageon实在是AMD 2006年收购的显卡公司ATI的项目,高通在2009年收购了这个项目并将其更名为Adreno,当年AMD和Intel抛售非x86业务给人的觉得是非常果断的,他们可曾料到一年后乔布斯推出的iPhone所引领的智好手机现在正在给他们带来最痛楚的时候。
既然是源自ATI的,这个Adreno自然有很深的ATI烙印。在2000年后,NVIDIA和ATI的GPU(NV3X的EarlyZ、R200的HyperZ等)都或多或少地采取分块式立即渲染架构,也便是TBIMR(Tile Based Immediate Mode Rendering),Adreno 200 便是源ATI 2002年时候的Imageon Z430。
TBIMR和TBDR比较,每个三角形都会按照递交的顺序交给着色器处理,理论上所有三角形都必须依照递交的次序处理,不过GPU厂商引入了Early-Z技能来考试测验将一些不可见的片元剔除掉。
在高通的“Qualcomm® Adreno™ OpenGL ES Developer Guide”里,对Early-Z有以下的先容:
在早期(2001年前)的GPU里,Z-test(Z轴深度测试)都是和阿尔法测试一样在像素着色完成后才进行的。
后来到了NVIDIA GeForce 3(NV20)和ATI RADEON 8500(R200)的时候,GPU 中开始引入名为Early-Z的操作(NVIDIA将其归入到名为Lighspeed Memory Architecture的观点中,ATI则将其归入到Hyper-Z里)。
Early-Z在GPU渲染流水线中位于三角形遍历和像素着色器(含纹理单元)之间,它会读取并测试片元的Z深度值,在进入像素着色单元之前抛弃掉不可视的片元。
Early-Z只有在三角形按照从前今后(由近及远)的递交顺序才能起浸染,而且为了做到片上高速处理,一样平常会采纳层次化Z缓存(Hierarchical Z-buffer)技能。
在采取Hierarchical Z-buffer的时候,GPU 会把每2×2个片元的四个 Z值中最靠近屏幕或者眼睛的Z值取出来,存到一个更“粗糙”的版本。
这个更“粗糙”版本的Z-buffer分辨率只有原 Z-Buffer的四分之一,GPU再对这个“粗糙”版本的Z-buffer再做同样的事,一贯重复直到分辨率只有一个片元。这样一来,就形成一个pyramid(金字塔)。
在渲染片元的时候,GPU先比较最粗糙版本的Z-buffer。如果要画的片元Z值还比较远,那这个片元就一定不用画出来了。如果它比较近,就再拿比较细的Z-buffer来比较,一贯比较到最细的版本。在空想的环境下,常日大部分的片元都不须要比较到最细的版本,以是可以节省不少韶光(要记得,一个“粗糙”版的Z值比较,实在就即是和四个“风雅”版的 Z 值比较)。
相较之下,PowerVR的TBDR会在几何阶段的三角形裁剪后将当前 scene(场景或者说画面)的三角形经由筛选排序存放在scene buffer 内,然后由 HSR(隐面肃清)算法将摄像机视点不可见的片元剔去掉,这部分实现细节已经在PowerVR一节中有阐述,这里就不再复述了。
按照高通的说法,Adreno从3xx系列采取了名为FlexRender的渲染架构,可以自动在立即渲染和TBDR之间切换,而且这个TBDR的实行过程和PowerVR TBDR是基本一样的(同样有对三角形进行binning和剔除无效片元的处理):
以是从微架构方面而言,高通透露的信息并不多,只能看到个大概,以骁龙820搭配的Adreno 530为例,采取了统一着色架构和FlexRender,配有256个ALU,支持DirectX 12.1、Vulkan、OpenCL 2.0。
采取骁龙820(搭载 Adreno 530)的小米 5(价格1999元版本))在运行OpenCL-Z的FP32 性能测试结果是287 GFLOPS,相较之下,价格799元的红米Note 2(Power VR 6200)只有44 GFLOPS,前者是后者性能的6.52倍,当然,这个测试只是属于底层测试,实际的游戏体验因人、因运用而异。
安谋Mali——弱核化设计
安谋(ARM)最为人熟知的是旗下的各款 ARM CPU内核,目前的紧张手机险些都是采取ARM 阵营的CPU。
ARM的GPU Mali是ARM在2006年收购的挪威公司Falanx得到的,源起于是90年代由ARM在挪威科技大学支持的的项目,到了2001年由Borgar Ljosland与四位在该项目中的GPU团队学生于2001年创办了这家Falanx Microsystems。
Falanx最初是希望打进台式机市场,不过随着3dfx、Matrox等公司的萎靡、败退,台式机GPU市场的格局发生了很大的变革,不再有空间给新丁了,Falanx转向了从事手机、PDA、机顶盒、游戏掌机、信息机等领域,不过他们当时在这个领域实在做得并不算很出色,ARM的收购对他们来说是一个主要的迁移转变点。
ARM收购Falanx推出的第一款GPU便是2007年的Mali-200,是Mali第一款OpenGL ES 2.0 GPU,它和它的换代型号Mali-300、Mali-400、Mali-450都是基于名为Utgard(北欧神话中Utgard-Loki统治下约顿巨人位于仙宫与尘世之外的宫殿)的微架构。Utgar采取的是非统一架构,顶点指令和像素指令有各自专门的单元来实行,到了Mali-400时候实现了多核能力。
Mali最新的微架构代号是Midgard,和Utgard不同的是,Midgard开始采取统一着色架构,几何和片元操作指令都在同一个着色器单元上实行。
Mali同样采取了分块式渲染(块元大小是16x16),但是根据下面这个幻灯片,可以看到其scene buffer或者说primitive buffer保存的图元顺序必须和程序递交的顺序保持同等(画红线部分),不存在PowerVR那样的筛选(sorting)动作。
因此如果按照ImgTec的说法 Mali并不能算是真正的TBDR,当然,它还是具备 Early-Z这样的隐面肃清能力,只是粒度上肯定不如PowerVR那么细(PowerVR自称其HSR能力为pixel perfect)。
在渲染流程方面,Mali或者说Midgard和目前你看到的大多数GPU做法有些不一样,那便是作为统一渲染架构,它可以在同一韶光里同时对几何和片元进行渲染操作,而其他的GPU在同一韶光里要嘛便是几何打算要嘛便是片元打算:
如上图所示,你可以看到Mali可以在同一韶光片上同时进行几何和片元操作,这表明Mali内部的任务调度设计非常灵巧,缘故原由请看下面的先容。
上图是Mali的着色器内核(Shader Core)功能模块图,可以看到,如果图示的确是精确的话,那么这个着色器内核里面可谓是五脏俱全,实质上便是一个小 GPU,图形渲染所涉及到的操作都能在一个 Shader Core 上完成,因此配有多个Shader Core的Mali可以做到在同一韶光内跑几何和片元处理,多个Shader Core的Mali GPU实在便是一个片上多GPU并行渲染系统。
实在其他厂商尤其是采取TBR的GPU可以像Mali这样片上多核运行多个Tile,但是Mali GPU的特殊之处是它的内核内部是没考虑扩展的,至少目前是这样。像ImgTecPower VR XT7等其他厂牌的GPU内部的CU数都是具备延伸能力的,而Mali GPU则对不起,不管什么型号的Mali GPU,上面的Tri-Pipe 都是固定的一个,这便是所谓的“完全的弱内核”设计。
从OpenCL的角度而言,每个Mali内核都是一个CU,只能以多个Partition(分区)的办法实现规模扩展。而像PowerVR则是既可以多个CU 也可以多个Partition的办法实现规模上的性能延伸。
值得一提的是,Mali-T880的Tri-Pipe,这实在便是Mali的可编程渲染/打算单元,个中包含了纹理(T-Pipe)、内存指令(LS-Pipe)和算术逻辑(A-Pipe)单元三部分,在Mali-T880之前,Tri-Pipe的算术逻辑单元大都只有两个,而在Mali-T880上,Tri-Pipe 的算术逻辑单元增加到了3个,使其打算能力提升了50%。
Mali相对付目前大多数其他厂商GPU的另一个差异要点是它的A-Pipe采取了SIMD向量处理设计,寄存器能够像目前CPU的SIMD单元那样灵巧地拆分成2xFP64、4xFP32、8xFP16、2xInt64、4xInt32、8xInt16、16xInt8等数据类型访问。
按照ARM的说法,Mali的算术ISA 用了SIMD + VLIW的设计:
三个向量单元(128-bit数据路径)
4路FP32或者8路FP16
16路Int8
两个标量单元(32-bit数据路径)
按照ARM官方博客的一篇文章,Mali-T760的每条A-Pipe单周期单精度打算性能是17FLOP,从上图来看,VMUL和VADD以及SADD、SMUL的FLOPS是该当是10个,余下的7个便是那个VLUT。
LUT的含义并不是很清楚,大概是查表(Look-up Table)的含义,不过这样的话,我以为彷佛不太适宜将其归入到人们常说的通用打算性能指标里,纵然其利用的是VLIW指令集。
以是我以为每条A-Pipe的单精度性能该当视作每周期10个比较得当。对付Mali-T880MP16来说,在 650MHz 时候的单精度性能该当是312 GFLOPS,同理,Mali-T760MP8的单精度浮点性能该当是104 GFLOPS,当然这只是我的个人见地。
LS-Pipe实行的是和纹理无关的内存存取动作,例如几何/片元处理时候的属性读取和变量写入操作。常日而言每条指令便是一次内存访问操作,如果是 A-pipe的向量操作便是单指令Vec4操作。
虽然ARM Mali并非TBDR,不具备在进入块元渲染之前透过筛选将无效的片元剔除掉,但是它的某些型号具备名为Forward Pixel Kill(正向像素剔除,简称FPK,见上面Mali-T880 Shader Core架构图中Early-Z后接的便是FPK单元)技能。
具备这个技能的GPU所跑的线程不再是不可撤销的,如果创造稍后的线程要向相同像素位置写入不透明数据,就会将已经在进行的打算终止掉。由于每个像素须要花费一段韶光才能完成,因此 FPK可以有一个韶光窗口来排空流水线中已有的无效渲染片元。
按照ARM的说法,这个FPK技能在最适中的流水韶光窗口下所能达到的肃清无效渲染效果可以和PowerVRTBDR w/HSR媲美,而且无需对全体画面的三角形进行筛选、无需在程序里添加筛选代码、能够对半透明工具实施精确处理、不会对帧率产生突变影响。
上面这个表格是维基百科上的Mali各型号规格表,个中的单精度指标是包括了那个VLUT的。
目前市场上大多数采取Mali的中端SoC都还是基于Mali-4XX系列,按照 ARM的说法,目前有75%的数字电视、超过50%的Android平板电脑、大于35% 的智好手机采取了Mali GPU。
例如小米电视3就采取了Mali-T760MP4这个GPU,三星去年的旗舰产品Galaxy S6、Galaxy S6 Edge都有采取Mali-T760,我手头有一台支持智能卡的电信T6有线电视机顶盒,搭配的是全志的SoC,个中的GPU也是ARM Mali-400MP,以是这个看上去有点古怪(完全的弱内核设计)的GPU在市占率方面Mali已经取得了相称不错的成绩。
三星Galaxy S6采取的Mali-T760MP8名义频率是772MHz,理论单精度性能是123.5 GFLOPS(按照每个算术流水线里包含两个4 路FP32 SIMD和两个 FP32标量来统计,未将那个相称于7个FLOPS 的VLUT或者说 SFU 单元打算在内),3DMark Ice Storm Unlimited 得分是 20988 ,而采取PowerVRGT7600的iPhone 6s Plus 3Dmark Ice Storm Unlimited 结果是27811,基本上符合123.5 GFLOPS vs 172.8GFLOPS (按照iPhone 6s Plus的GT7600频率为450MHz时打算出的单精度性能为172.8 GFLOPS)的差距。
我们相信,在新的一年里将有机会看到Mali-T8xx系列初露峥嵘,缘故原由是Mali的完全弱内核比较便于随意搭配,新内核带来的规格、性能提升也可以为新运用带来更好的用户体验。
结语
在这篇文章里,我们先容了三个常见的智能设备或者说手机/平板电脑的GPU,涉及到的知识面相对坊间的大多数文章而言要更深入一些,例如ImgTec的PowerVR、高通的Adreno、ARM的Mali虽然都属于TBR,但是详细的实现却有着各自的特色。
ImgTec的PowerVR是三个TBR架构中历史最长的,也是10年GPU大战中少数幸存下来并且活的还比较滋润津润的厂商之一,PowerVR在TBDR方面拥有非常丰富的实作履历,凭借 TBDR 的高能效比特点,在移动设备中站稳了脚跟,成为包括苹果在内浩瀚手机厂商选择的GPU方案。
高通的 Adreno 从3xx系列开始引入了名为FlexRender的渲染技能,能动态在IMR和TBDR渲染模式之间切换,前者可以在兼容性、相应时延方面供应最佳的担保,而后者可以在性能耗电比方面达到更佳的体验效果。
Mali的渲染架构相对大略,属于TBIMR,也便是分块式立即渲染,对递交的三角形顺序不作筛选处理,分块的紧张目的是节省带宽,不过它的某些型号具备名为 Forward Pixel Kill的技能,能够随时停掉“预见”到的无效像素(线程)的渲染,号称可以达到媲美PowerVR TBDR 的效果。同时,Mali采取了“完全弱GPU内核”(相对付其他厂商的“完全可延伸GPU内核”而言)设计,内核中的渲染单元不能扩展,性能的规模延伸是透过增加内核数来达到。
我们在本文中没有对NVIDIA的GeForce ULP和Intel的GenX进行先容,不过它们实在基本上便是同架构的台式机版本的规模缩减版,当然,由于针对的移动设备,个中还有一些省电方法,遗憾的是,这两家厂商的GPU虽然性能不错,但是在手机市场上由于各自自身的成分而缺少整机厂商的支持。
对大多数读者来说,GPU架构乃至GPU是啥,的确完备可以不须要理解,只要媒体或者朋友先容说哪一部手机好用乃至是看上去外不雅观比较合眼缘就可以让他们绝不犹豫地掏腰包购买。
以是,本文从一开始就不打算透过这篇文章来影响读者的购买意向,这只是一篇有科普性子的文章,尽可能地较少功利的成分,但求看起来资料尽可能详细有趣同时又能增加一些见识就行。