“赶英超美”的路上,移动处理器如何超车游戏主机?
在上一篇文章中,我们发现近些年来移动处理器GPU处于一种“浮点性能狂飙”的非正常状态下,在5年里浮点性能提升了足有21倍多,远超摩尔定律下应有的进化幅度,隐约间有一种“我欲成仙”的感觉。
再这样躁动下去, 手机 平板这两座小庙可能真就容不下这些大佛了。既然如此,这次我们将视线放的更宽一些,索性进行一次跨领域的分析,看看现今的移动平台的性能表现相比 游戏 主机又是怎样的情况。
这样以小博大的对比看起来似乎有些不合情理,但也并非是无事生非,早在小米2发布时,小米就曾宣称其图形性能已经堪比当时的XBOX360游戏主机。
小米手机2的宣传图
当然,我们现在知道小米2所使用的处理器为高通APQ8064,其GPU的浮点性能公开数据为57.6Gflops,实际理论性能则为51.2Gflops,在XBOX360 240Gflops的GPU浮点性能面前只是个零头罢了。而宣传中所标榜的三角形渲染能力200M每秒、像素填充3200M每秒,比起XBOX360的500M、16000M也是差距甚远,“堪比”是绝无可能的。
每次都是XBOX360,招谁惹谁了?
自小米手机2“首次超越”游戏主机之后,移动处理器再次超越游戏主机是在2014年1月,NVIDIA在CES展会上发布了Tegra K1移动处理器,并宣称其性能已经超过了上代主机PS3及Xbox 360,而功耗仅有后两者的二十分之一。
NVIDIA PPT上的Tegra K1
当然,这张PPT我们看看就好,在CES 2014的展馆中,Tegra K1演示平台那硕大的铝制散热片和电源适配器上“12.0V 5.0A”的供电规格,都充分说明了其功耗和发热远不止5W。且正式发售时GPU的设计最大频率相比初公布时还下调了100MHz,浮点性能也相应的降低到327Gflops,多少有点官方打脸的意思。
CES展台上的Tegra K1
而后在2015年1月的CES展会上,NVIDIA又发布了新一代核弹级移动处理器Tegra X1,CPU部分为4颗Cortex A57+4颗Cortex A53,GPU部分则使用能耗比更高的Maxwell架构,共计256个流处理器,在1GHz的设计最大频率下可达到512Gflops浮点性能。
相比高通等传统移动处理器厂商,NVIDIA这种直接将PC端图形架构下放的做法,从技术和性能上讲显然更加给力一些,而且Tegra公开的浮点性能与计算得出的理论性能也非常一致(Adreno你好好看看人家)。但给力的性能也产生了更加“给力”的功耗和发热,Tegra K1和Tegra X1一辈子与手机无缘也就罢了,Tegra K1适当减低频率后在平板里好歹还是比骁龙800更强,可Tegra X1却已经连平板都难以容身。
幸好,市面上还是有两款安卓游戏设备痴情的选择了Tegra K1和Tegra X1,并且丝毫不在意它们大手大脚的肆意挥霍电能,全心全意的为它们供电给它们散热,将它们送到了“芯”生巅峰。这二位就是大(臭)名鼎(昭)鼎(著)的战斧F1,以及NVIDIA官方御制的SHIELD TV。
NVIDIA官方御制的SHIELD TV
战斧F1里面那颗Tegra K1在充足的供电和良好的散热下,GPU跑到了设计最大频率852MHz,浮点性能也达到了327Gflops的满血状态,SHIELD TV的情况也差不多,解除封印的Tegra X1无疑是“最接近神”的。当然,无论是战斧F1的Tegra K1还是SHIELD TV的Tegra X1,如此火力全开的状态下,功耗都达到了25W~30W的水平。
从浮点性能为指标来看,就算是战斧F1的Tegra K1也已经大幅超过了上世代主机PS3(224Gflops)和XBOX360(240Gflops),再加上更先进的Kepler架构以及对全新渲染技术的支持,按照常理,它所能渲染出的画面应该明显强于PS3和XBOX360才对。
但现实远不像浮点性能一样乐观,以全平台游戏《超级房车赛: 汽车 运动》为例,战斧F1版画面上硕大的锯齿、模糊的纹理材质贴图、动态模糊和光照效果的缺失,与XBOX360版相比简直判若两个游戏。
这是XBOX360的《超级房车赛:汽车运动》
这是战斧F1的《超级房车赛:汽车运动》
盐打哪咸,醋打哪酸?
要想明白个中缘由,我们先要大致了解一下图形渲染的知识。
当今主流的图形渲染方式被称为“光栅化渲染”,名字虽然沾一个“光”字,但光栅化渲染中其实根本没有“光线”这种概念。“光栅化(Rasterization)”指的是3D几何转换为2D像素的过程,所有的画面特效都只是针对一个个像素的操作。
如果排除掉AI等与画面素质没有直接关系的部分,当游戏开始渲染一帧画面时,首先由CPU生成游戏场景中所有物体的顶点,然后把所有顶点的坐标信息发送给GPU内的几何单元。几何单元以屏幕位置为基准构建出可视空间,将这些顶点按照坐标安置到空间中,紧接着将顶点连接成线框,构造出物体的轮廓,然后在表面覆盖上一层带有带光照信息的底层纹理作为蒙皮。到这一步,我们的游戏画面便初具几何形态。
3D模型从顶点到蒙皮后的样子
接下来便是整个光栅化渲染流程的核心:光栅化,GPU内的光栅化单元(Rasterizer)依照线透视关系,将整个可视空间从三维立体形态压成一张二维平面。之后流处理器再根据场景中物体之间的几何位置关系,通过各种渲染算法,确定哪些像素亮&有多亮,哪些像素暗&有多暗,哪些像素是高光,哪些像素是阴影。
在流处理器忙着计算像素信息的同时,GPU内的纹理单元也开始将预设的“整张”纹理材质剪裁成画面所需的形状。最后,流处理器和纹理单元分别把计算好的像素信息和剪裁好的纹理材质递交给处于GPU后端的ROPs,ROPs将二者混合填充为最终画面并输出。除此之外,游戏中雾化、景深、动态模糊和抗锯齿等后处理特效,也是由ROPs完成的。
到现在你该明白了,我们看到的每一帧游戏画面,都是GPU画给你的一张3D立体画而已。3D立体画看起来真不真实,取决于绘画者的水平如何;而光栅化渲染出来的画面真不真实,取决于渲染算法是否先进和完善。
光栅化渲染流程就像手绘3D立体画
难兄难弟,Tegra K1和Tegra X1
其实在NVIDIA发布Tegra K1时,传奇程序员约翰·卡马克曾在推特上提到,他本人对K1性能超越PS3主机的说法持保留意见。卡马克不是N黑,他与NVIDIA公司关系相当好,但他对游戏主机的性能是相当了解的,移动处理器要想在超低功耗下达到甚至超越主机级的性能并不容易。
Tegra K1的GPU核心为Kepler架构,192个流处理器,8个纹理单元,4个ROPs,CPU与GPU共享14.9GB/s内存带宽。与Tegra K1规格相近的PC端产品是笔记本显卡Geforce GT 720M,Kepler架构,192个流处理器,16个纹理单元,8个ROPs,GPU独享12.8GB/s显存带宽。
显而易见,NVIDIA虽然宣称Tegra K1的GPU性能已经超过上世代主机XBOX360和PS3,仅仅是指流处理器的浮点性能而已。与Geforce GT 720M相比,Tegra K1的纹理单元和ROPs均被减半,纵观图标上六款GPU核心的参数,Tegra K1的纹理单元和ROPs明显少的不正常,CPU和GPU共享的14.9G带宽更是捉襟见肘。
莫非NVIDIA故意堆砌流处理器玩数字战争?其实不然,这更多的是由于Kepler架构与移动处理器领域天生八字不合导致的。
Kepler架构采用了名为SMX(流式多处理器)的微架构设计,整个GPU由数个SMX单元组成,每个SMX单元可以看做CPU内的一个核心,就像多核CPU一样。SMX单元是Kepler架构中最小的宏观结构,一个SMX单元内集成192个流处理器和16个纹理单元。
SMX单元结构
Kepler架构的GPU在规模变动时,SMX单元内的流处理器数量无法变动,而纹理单元和位于SMX外的ROPs单元则不受此限制。也许是考虑到纹理操作和像素填充对带宽的依赖性,Tegra K1将SMX单元内的纹理单元数量减半为8个,ROPs也只集成了4个,以节省宝贵的带宽资源并降低芯片功耗,而流处理器只能保持完整192个。
迫于Kepler架构自身的局限性,Tegra K1最终成了这样一幅大头娃娃的样子。而现在的游戏越来越依赖高清纹理材质贴图以及各种后处理特效,没有足够的纹理单元和ROPs的Tegra K1空有一身强大的流处理器浮点性能,却渲染不出应有的画面水平,这也就不难理解战斧F1上《超级房车赛:汽车运动》为何会是那样的表现。
看过了Tegra K1,我们再来看看Tegra X1。
Tegra X1的GPU核心为Maxwell架构,256个流处理器,16个纹理单元,16个ROPs,CPU与GPU共享25.6GB/s内存带宽。与Tegra X1规格相近的PC端产品是笔记本显卡Geforce 830M,Maxwell架构,256个流处理器,16个纹理单元,8个ROPs,GPU独享14.4GB/s显存带宽。
Maxwell架构采用了全新的SMM单元(Maxwell流式多处理器?),每个SMM单元内的流处理器数量减少为128个,纹理单元也减少到8个,但NVIDIA在每个SMM单元内加入了更多的逻辑控制电路,并重新编写了调度算法,可以精确调控各部分计算资源,这使得Maxwell架构的效能提升了一倍。
SMM单元结构
NVIDIA这一次确实很给力,Tegra X1的GPU集成了两个完整的SMM单元,共计256个流处理器和16个纹理单元,NVIDIA还在后端设置了16个ROPs,补齐了之前在纹理单元和ROPs上的短板。同时,Tegra X1的内存带宽也提升到了25.6GB/s,还支持Maxwell架构的Delta压缩技术,内存带宽利用率相比Kepler架构可提高30%。
简直美如画不是么?Tegra K1未能实现的梦,Tegra X1总该能圆上了吧。
高兴的太早了大胸弟,来看看SHIELD TV版《合金装备:复仇》和《生化危机5》与XBOX360版的画面对比吧。
《合金装备:复仇》SHIELD TV与XBOX360对比
《生化危机5》SHIELD TV与XBOX360对比
SHIELD TV版《合金装备:复仇》的帧数相比XBOX360版存在巨大的差距,某些场景下甚至只有XBOX360版的一半,纹理材质的精细度也略差于XBOX360版。而《生化危机5》虽然在SHIELD TV上的帧数与XBOX360版相近,但画面特效却出现了明显劣化,纹理材质贴图的模糊程度比起战斧F1上的《超级房车赛:汽车运动》也不遑多让。
要知道2011年底发售的掌机PSV与安卓设备的硬件架构非常相似,CPU为333MHz的四核Cortex A9,GPU则是222MHz的PowerVR SGX 543 MP4+,浮点性能只有28.8Gflops,却可以渲染出特效精美的画面。虽然PSV的分辨率只有960*544,而SHIELD TV是1080P,但SHIELD TV的性能要强过PSV十几倍,在1080P下应该能实现相同甚至更高的特效才对。
PSV游戏《杀戮地带:雇佣兵》
这简直见了鬼了,实际情况显然又一次偏离了我们的预期,看起来哪都没毛病的Tegra X1为何还是不如XBOX360?这台2005年底发售的老爷机真就这么强?
天道好轮回,开发者放过谁?
在之前的工作中,我曾经与PS4/PSV游戏《火箭鸟:铁汉雄鸡》开发团队的主程序员“O大”探讨过游戏画面与硬件性能的问题。O大表示,如果一款游戏的画面没有达到硬件性能应有的水平,必然存在几个原因:1,给GPU的任务建立的不合理;2,交给GPU处理的数据不友好;3,因为不了解GPU内部的原理,对GPU的编程不好,导致资源闲置。
那么怎样建立GPU任务才比较合理?怎样保证数据让GPU处理的得心应手?怎样才可以提升GPU的利用率呢?
以PSV为例,PSV的GPU有scene的概念,切换scene的性能开销非常昂贵。如果要切换render target的话,就必须终结当前scene,再开启一个新的scene。也就是说,很多对PS3或PS4来说最优化的代码,到PSV这里会变的非常低效,需要使用新的优化方法。
PS3的《神秘海域2》大量运用了post effects,需要建立非常多的render target和小任务,每个任务都很便宜,把它们串起来执行,在PS3的GPU上是最有效率的。PSV的《神秘海域:黄金深渊》未经修改就直接套用了PS3版的光照模型,但是在PSV的GPU上切换render target就必须切换scene,切换scene的代价又非常高,这就导致了很多不必要的资源浪费。
《神秘海域:黄金深渊》的画面明显不如《杀戮地带:雇佣兵》
而PSV的《杀戮地带:雇佣兵》就吸取了这个教训,所有的光照模型都改成forward lighting,使scene的数量最小化,这是《杀戮地带:雇佣兵》画面优秀的最重要原因。
移动处理器的GPU性能比PSV强,游戏画面不好必然是由于优化不好,不得不降低画面来保持可玩性。一般人对移动处理器的性能期待,都是建立在不与底层打交道的基础上,像上面这样针对底层的优化,让游戏的渲染性能提升2~4倍是很常见的事情。
不过底层优化需要一个固定硬件的平台,还要让程序员可以直接接触硬件,这两点对于游戏主机来说是理所当然的,但在移动处理器应用的领域则很难实现。SHIELD TV虽然硬件平台是固定的,可游戏在安卓系统下没有直接沟通硬件的权限,还是无法充分利用硬件的特性,性能发挥自然还是会受到限制。
除了开发环境的客观限制之外,现在的开发者们还越来越热衷于研究“心理热学”,在遇到性能和优化不足等方面的问题时,不去思考如何通过增强优化技术来解决问题,而是使用调整UI或镜头等方式欺骗玩家的眼球,让玩家不会因为低劣的画面质量而产生不悦的情绪。甚至使用跳帧或干脆降低画质标准这样更加简单粗暴的方法,认为玩家不会看出这些问题,自我放纵,得过且过。
某论坛上一位推崇“心理热学”的开发者
深谙GPU设计的NVIDIA尚且hold不住开发者如此粗放的挥霍性能,其他移动处理器厂商就更是同时面临内忧外患。卡马克大神曾在开发者大会上指出,现在的开发者们变得越来越懒散,不求深入优化自己的软件代码,只是等待更强大的硬件出现。移动平台的性能永远追不上桌面平台,二者会保持十年的性能差距,但这应该更能磨砺开发者们增强开发和优化技能,成长为更好的程序员。
后记
实际上,2015年1月发布的Tegra X1,与2005年11月发布的XBOX360正好相隔了差不多十年,根据卡马克大神的观点,Tegra X1的性能确实应该和XBOX360相仿才对。幸好在2017年3月,任天堂推出了基于Tegra X1的新款游戏主机Switch,给了这款处理器一个释放自我的机会。
任天堂Switch所用的Tegra X1为了照顾全新的掌机形态,在功耗和发热方面做了严格限制,CPU部分关闭了四颗Cortex A53小核心,只开启四颗Cortex A57大核心并将频率压低到了1.02GHz,GPU部分的频率则为掌机模式307MHz/主机模式768MHz,浮点性能157Gflops/393Gflops,相较NVIDIA SHIELD上的“满血”版有了明显降低。
掌机模式下Switch整机功耗约8瓦,推断处理器功耗大约为4~5瓦
然而,在主机平台充分的优化下,理论性能更低的任天堂Switch,实际游戏画面却可以说完胜火力全开的NVIDIA SHIELD,也要优于上世代游戏主机PS3和XBOX360,为Tegra X1的性能做了正名。
《黑色洛城》PS3版与Switch版对比
综合来看,在维持功耗和发热合理的前提下,移动处理器要实现超过游戏主机的性能,需要将近10年的时间差。而考虑到普通移动平台上的实际开发情况,想要真正实现超过主机游戏的画面,移动处理器相比游戏主机的性能优势还要更大一些。
2017年末,旗舰SoC理论性能已经达到PS3和XBOX360的3倍左右,像Gameloft等一些技术实力强大的手机游戏厂商,尽管仍然无法针对硬件底层进行优化,但在做足了常规优化之后,游戏的画面表现依然超过了PS3和XBOX360。Gameloft开发的《现代战争:尖峰对决》甚至还在发售后移植到了PC平台。
《现代战争:尖峰对决》游戏画面
只希望移动处理器厂商能保持清醒的头脑,设计出均衡合理的架构;开发者能更注重开发和优化水平,充分发挥硬件性能。这样才能获得更好的性能表现,缩小移动处理器和游戏主机之间的“代沟”,在更短时间内完成“赶英超美”大计划。
来源:青亭网