ARM作为移动计算领域实际上的掌控厂商,对移动计算产品未来的发展方向有着决定性的能力。在GPU的发展上,从一开始Mali系列的弱势到现在Mali已经成为诸多厂商的首选,ARM在Mali GPU架构的发展上倾入了诸多心血。最近,又披露了下一代移动GPU架构的详细信息。这个被称为Midgard的架构,又将带来哪些新的技术和惊喜呢?今年是SoC产品应该铭记的一年。从市场角度来看,移动计算的硬件设备有着充裕的性能增长空间,尤其值得注意的是,移动GPU无论是性能还是特性都有了充足进步。凭借更先进的架构和工艺,移动GPU在特性上逐渐和桌面GPU靠拢,正在变得足够优秀并令人满意。而在移动SoC GPU的发展中,ARM的Mali是一个从小到大,从无到有的典型。
目前,全球绝大部分移动计算设备的基础CPU架构都来自ARM。在移动SoC等市场中,ARM的地位牢固而不可动摇,不过在GPU市场,ARM只是诸多厂商中的一家。这是因为ARM的GPU部门并非从一开始就拥有,而是随后通过收购组建的。ARM的GPU设计项目最早从上个世纪90年代末期开始,由挪威科技大学开始开展,随后在2001年,这个项目的Mali小组成员从研究中脱离出来,成立了一个名为Falanx Microsystems的公司。Falanx公司的人员刚开始瞄准的是PC图形市场,但当时已经是后3DFX时代,群雄并起,包括S3、Rendition、Revolution以及Imagination等公司最后都失败了,最终Falanx无法筹集到足够的资金,被迫放弃了PC图形市场。
在那个“紧迫期”,由于资金有限和PC图形硬件极高的研发成本,Falanx最终决定转向移动SoC GPU设计。因为移动GPU设计更简单且较容易成功。Falanx的产品Mali GPU也迎来了他们的第一个客户—美国Zoran公司,使用了Mali-55作为他们Approach 5C SoC芯片的GPU,这颗芯片还被用在LG's Viewty这样广受欢迎的手机产品中。即使如此,Falanx还不满足,最终在2006年迎来了他们的“大鱼”。鉴于SoC市场不断的扩大以及将带来的移动计算大潮,ARM公司终于决定买下Falanx,组建自己的GPU事业部,并联合ARM的CPU一起推动整个产业的增长。ARM作为一个处于上升期、资金充裕的公司,完全有能力给Falanx充足的资金和研发资源来实现梦想。
2007年,Mali作为ARM的一部分,发布了Mali-200 GPU。这是ARM第一款支持OpenGL ES 2.0的产品。它和随后的Mali-300、Mali-400以及Mali-450,都属于代号为“Utgard”架构的产物。Utgard架构的特点是并非像现代GPU设计那样采用了统一渲染引擎,它依旧是一个典型的顶点和像素分离式渲染的产物。虽然架构不算先进,但是Mali设计团队始终坚持对其进行新技术扩充和升级研发,使得其性能和可扩展性都达到了令人满意的程度,尤其是Mali-400,这是Mali首次开发的拥有多内核能力的GPU,如果需要获取更高的性能,用户只需要使用更多个Mali内核即可,这和桌面GPU的SLI和CrossFire有异曲同工之妙。
Utgard架构堪称是Mali最为成功的GPU架构,它基于OpenGL ES 2.0的设计和较低的成本满足了中低端市场的需求。如今虽然顶级SoC芯片开始支持DirectX 11以及Open GL ES 3.0,但是Utgard架构的Mali-450系列GPU依旧颇受用户和厂商欢迎。包括三星、华为等厂商最近发布的海思Kirin 910以及三星Galaxy S5 Mini,其处理器都搭配了Mali-450 GPU。
如今,在Utgard架构之后,Mali推出了Midgard架构,这个全新的架构包括了Mali-T600和今天介绍的T700系列GPU。虽然Midgard推出时是作为高端GPU架构设计的,但是在对芯片体积、功率和成本的进一步优化后,Midgard也将作为中端和中高端产品的基础架构使用。而上代Utgard则下调至覆盖中端市场。从整体来看,ARM目前在市场上的位置其实非常微妙。市场上的芯片厂商比如高通、英伟达,往往是在CPU方面购买ARM授权,GPU则是自己设计,而诸如Imagination这样的图形处理器厂商又只专精于GPU设计。ARM则完全可以同时提供GPU和CPU方案,并将其打包销售—这似乎意味着ARM有能力设计一款CPU和GPU互相协同工作的产品,这对别的厂商来说,意义是否异乎寻常呢?
一个全新设计的架构—鸟瞰Midgard,汉语经常写作米德加尔德,它源于北欧神话。米德加尔德是指火神洛基的第二个儿子,形象通常是以环绕人间界、首尾相连的巨蟒出现,因此也有人以米德加尔德代表人间。在北欧神话中,米德加尔德一般以反派出现,它力大无穷,通天彻地。在Mali眼中,Midgard似乎就需要这样强大无比,将全球移动GPU市场纳入囊中。
回到现实中。Midgard从架构上来看很有趣,它的某些方面和市场中已经出现的GPU架构非常相似,但另一些方面差异又非常大。从架构上来看,Midgard是之前Utgard的继承者,但是统一渲染架构和分离式渲染架构的差异如此之大,使得这两个架构又不能直接比较。当然,Midgard还是继承了不少Utgard中优秀的部分,尤其是部分周围功能模块。Midgard架构相对应的产品最终需要占领从廉价到顶级这样广阔的市场,为了达到这样的目的。
ARM对产品进行了一些调整,削减了部分中低端型号的功能,并对内部结构进行了改变。因此,本文将重点集中在Midgard最顶级的型号上,这样可以充分展示这个架构设计的优势。
首先需要了解的是Midgard的设计目标和功能。和之前只能支持OpenGL ES 2.0的、已经基本没有升级空间的Utgard不同,Midgard的功能要求更为丰富,它不但需要提供强悍的图形性能,还需要能够带来出色的计算性能。这部分内容需要依靠于统一渲染架构来完成,因为这类架构天生擅长大规模的数学、图形计算。因此计算功能只是一个扩充,但也是经过深思熟虑后的决定—ARM推广通用计算的目的可能不仅仅考虑图形市场。此外,从API的角度来看,Midgard架构设计甚至是超出目前的OpenGL ES 3.0的,所有的Midgard都能在硬件层面上支持OpenGL ES 3.1,不过OpenGL ES 3.1的功能设计依赖于操作系统和设备供应商所提供的驱动程序,这样的设计可以使得Midgard能够在未来API更新后跟上新的标准而不至于落伍。
ARM的GPU发展计划,从低端到高端都有覆盖。其中蓝色箭头代指产品采用了老的Utgard架构,而新的橙色箭头的产品都采用Midgard架构。目前的安卓系统可能很难支持Midgard的部分功能,但是更新的Android L和Android Extension Pack却能充分应用它们。新的Android Extension Pack将进一步扩展Open GL ES 3.1,尤其是加入那些目前尚不能支持的重要功能,诸如曲面细分和几何着色器(在桌面GPU中,前者在Direct3D 11中纳入官方支持,后者是Direct3D 10的代表性技术)。鉴于这种情况,Midgard都预先提供了对上述功能的支持。ARM已经证实,他们希望所有基于Midgard的GPU都能支持未来的更新的安卓系统和Android Extension Pack。
还有一点优势在于,伴随着OpenGL ES的规格更新,Midgard也开始支持Direct3D—由于目前Mali无法支持Direct3D,因此所有Windows Phone和Windows RT设备都只能使用英伟达或者高通的SoC。不过为了进一步区分市场,ARM还是将Midgard架构的产品做出了一些区分,比如即将到来的顶级产品Mali-760能够支持Direct3D 11.1,而较低端的Mali-T720只能支持到Direct3D 9.3,后者将普遍出现在入门级、更为注重成本的市场。
另外,Midgard的计算性能也需要关注。Midgard打算通过同时支持Android RenderScript框架和OpenCL 1.2,并积极成为这个领域的一个强有力的竞争者。OpenCL目前在移动计算领域做得并不算太好,主要原因在于操作系统都没有对它提供一致性的支持,比如iOS,而安卓也是最近才开始支持,即使某些硬件支持OpenCL,但在支持的功能上也存在差异,最终限制了开发人员使用这项技术。在这一点上,ARM已经明确表示,他们的Midgard将完全支持这方面的GPU计算。
在分析Midgard的架构时,本文将从一个比较高的视角来观察它。下文给出了Midgard的着色器核心架构,尽管名称上被称之为“着色器”,但是实际上其中的内容非常丰富:“着色器”在本文中包含的内容不仅仅是一个普通着色器中所包含的“三管线(tri-pipe)”设计,还包含了三角形Setup模块、光栅化模块、Z轴消隐模块、ROP单元、tiling模块以及专门为通用计算和“三管线”而设计的一些线程控制模块。在之前的会议上曾经被提出过来,并明确说明不会支持曲面细分、几何着色器。一个Midgard的着色器,实际产品诸如Mali-T760,由于要充分考虑设计上的可扩展性,因此即使这个着色器包含了一个GPU的绝大部分内容,但是它依旧不能算作一个完整的GPU—因为部分周边部件并没有被放置在目前所介绍的着色器中。ARM设计了一个可扩展的、带有绝大部分功能的着色器,同时给出了一系列的共享硬件,厂商可以根据需要选择不同数量的着色器搭配共享模块,最终获得合适的GPU方案。Midgard支持从1个到16个“着色器”的设计方案,这也是最强悍的Mali-T760MP16的来源。Midgard的共享部分主要是一些管理模块,比如任务调度管理器等,其次是L2高速缓存、可以访问内存或者CPU缓存的内存控制器,最后还有系统总线AMBA 4 ACE-Lite。对于最强悍的Mali-T760MP16而言,ARM的设计方案中配置了一个任务管理单元和内存控制器,而为了满足16个核心的计算资源需求,ARM设计了两组L2高速缓存和总线接口。
说完了外围和全局设计,下面来看看核心本身,尤其是最重要的三管线设计。这个模块是整个GPU计算的核心,它由多个ALU单元、读/写单元和纹理单元组成。虽然很多的GPU设计基础部分都需要这三个模块,但是ALU可变设计着实非常少见—在不同型号的GPU上,ARM在相同的架构中使用了不同的ALU。
这句话听起来有点拗口。举例来说,在Mali-T760上,每个“三管线”包含了2个ALU,这也是Midgard中最常见的配置。此外,Midgard也拥有每个“三管线”中包含1个ALU和4个ALU的方案,前者比如Mali-T720,后者比如Mali-T678,此外还有Mali T628和Mali-T760一样都是每个“三管线”内含2个ALU。当然,在不同的“三管线”中使用不同数量的ALU带来了一些连锁效应,ARM调整了ALU和纹理单元、读/写单元之间的比率以获得相应的性能。比如Mali-T678,每个着色器采用4 ALU设计,因此这颗GPU的内部指标和其它的产品都有所不同,在纹理单元上为了配合增多的ALU也相应增加了。实际上ARM在Midgard上尝试了多种不同的配置方案,最终确定了在Mali-T760上使用每“三管线”2个ALU、以及在定位低端的Mali-T720上使用每“三管线”1个ALU的方案,并进一步优化了这样的设计。Midgard的设计使得GPU的每一个计算管道在任何情况下都有自己独立的线程,这和目前比较常见的超标量架构有明显不同,常见的超标量架构的一些附加计算单元可以在一个线程中用于执行进一步的无阻塞指令,而Midgard的设计可能会消除一些瓶颈效应从而带来效率的提升。
在看完了有关ALU的内容,下面来分析一下纹理单元。Midgard的纹理单元可以在一个时钟周期中处理一次双线性计算,或者在两个时钟周期内完成一次三线性计算。需要注意的是,这里分析的是内容是基于Mali-T760的ROP单元和纹理单元比例,另外,在任何情况下Midgard中的纹理单元和像素单元的比例都是1∶1。接下来的内容在图表中没有画出来,也就是曲面细分单元。要知道Mali-T760宣称支持Direct3D 11.1,但是为什么在架构中没有硬件的曲面细分模块呢?这并非遗漏或者ARM在吹牛,这是Midgard的一个独特设计。
Midgard可以执行曲面细分,但是它没有使用固定的功能来完成几何创建的过程。Midgard使用了着色器硬件的部分来执行曲面细分,不仅仅是在Hull和域着色器阶段,实际的几何生成过程也发生在着色器中。这和之前我们看到的几乎所有的硬件都完全不同,因为迄今为止还没有出现不使用专门的曲面细分硬件但同时又完成曲面细分功能的产品出现,Midgard首个这样设计的方案。
传统的曲面细分过程需要硬件执行操作,但是Midgard没有这部分内容,这令人感到疑惑
ARM的消息指出,之所以这样设计,是因为他们考察了有限的晶体管使用、芯片体积以及专用曲面细分单元的优势后,最终决定的方案。事实证明,Midgard的着色器引擎可以以较高的比率完成曲面细分多边形处理,这意味着Midgard不需要专门的曲面细分单元,也意味着Midgard几乎不存在曲面细分瓶颈,因为Midgard的每个着色器都是曲面细分的处理模块。在节约了空间后,ARM还可以将有限的芯片面积用于增加着色器数量从而有效提高性能。
由于目前还没有实际产品可以看到,因此最终这个方案是否有效也只有ARM才能知道了。只有他们实际掌握了有关Midgard GPU曲面细分的性能的细节信息,但这样的设计已经使得Midgard变得极不寻常。另外需要考虑的一点是这样设计的能耗成本,我们暂时没有理由怀疑ARM这样设计所带来的空间或性能上的优势,但以通常的角度来说,一个专职的硬件模块会比通用性强的硬件模块有更好的性能表现乃至功耗比,这也是为什么我们看到有这么多的SoC GPU和桌面GPU比较相似的原因。
在使用了令人诧异的硬件设计后,显然还有另外一个问题需要考虑,那就是实际性能。Midgard的“着色器曲面细分”设计是否能获得相应的性能呢?是否比使用传统硬件曲面细分要更出色呢?电能消耗是否划算呢?这一切目前还都是未知数,但仅从硬件上看已经值得我们期待。