콘텐츠로 건너뛰기

Essentials of Mobile hardware

About mobile SOC

与PC游戏开发不同的是,Mobile device的硬件种类繁多,差异较大。

对于我们而言,最重要的是积累开发Mobile device的经验。

例如,进行各种硬件优化,QA 和QT,以及整个开发工程中不可或缺的Automatic build system,还有为了让绘图颜色看起来更美观的各种Shader技术。

这一章主要介绍了游戏策划人员,艺术家,游戏图形程序员,游戏引擎开发人员应该具备的相关知识。

普通AP的架构

AP原来是指用电池驱动的,专门为Mobile Embedded Computing设计的CPU。早期,其安装在notebook/netbook/UMPC和PDA等便携式PC上。现在,AP(Application Processor)安装在智能设备的SoC上,已经成为了mobile process的代名词。

AP 包括了CPU和GPU核心,其运行操作系统和应用程序,具有control附近Chipset的function。▶一般而言,AP由CPU,处理2D/3D图形的GPU,ISP(Image Signal Processor),multi format video codec, 运行audio and voice recognize processing的DSP,以及各种interface IP等组成。

CPU是运行操作系统和中介软件,应用软件(Application SW)的中央处理器。现在,ARM公司的Cortex-A处理器是市场上的主流产品。

GPU支持OpenVG, OpenGL ES等图形语言和library。Imagination Technologies公司的PowerVR和ARM公司的Mali是具有代表性的GPU IP产品。为了支持种类繁多的多媒体Codec的运行,例如H.264, MPEG2, DivX, Xvid等,其与负责专用硬件IP和控制的处理器同时运行。

Mobile AP的演变

首先要了解引起Mobile Graphic变化的原因,我们一起来思考一下这个问题。

我们通常把Mobile AP理解为安装在我们现在使用的智能设备(Smart Device)上的综合处理器。如果将设备比作人体的话,Mobile AP起到的作用如同人体的大脑,心脏和肌肉。

与2011年相比,2012年Smart phone hardware manufacture company目前面临的问题是“保证core process的高速运行,同时减少电量的消耗!”。因此 ,出现了各种方式的mobile AP的unit design,直到现在2013年在市场上基本普及。例如,以PC显卡加速器闻名的生产商NVIDIA,用了两年多的时间进行mobile AP的开发,其开发的mobile AP技术具有里程碑意义,这一技术也在快速发展着。现在占有世界mobile AP市场份额最多的Qualcomm公司,也于2013年中期,在市场上普及了SnapDragon 800的使用。在开发mobile game的时候,我们会发现三星 Galaxy S4的国内版(韩国版)使用的mobile AP和国外版使用的mobile AP是不一样的。

三星Galaxy S4的国内版(韩国版)使用的AP是三星自己研发的Exynos(Arm cortex + ARM MALI 的图形处理器组合),国外版和LTEA版使用的是Qualcomm公司的Snapdragon 800。本来是想一笔带过这个问题的,但在图形处理上,两者压缩Texture的方式不同,所以两者在压缩Texture的memory Access speed,capacity 和image channel type上的不同点,值得我们深入研究。

我们可以知道在后面的案例中,设计人物角色或背景时,不使用Alpha通道素材的原因。

在文章导入部分提及过,iPhone和iPad一直在使用由Arm cortex + PowerVR组成的mobile AP。

Imagination公司的PowerVR图形处理芯片使用的渲染算法是SMALL TIEL BASED RENDERING方法。(ARM推出的MALI GPU也运用了SMALL TIEL BASED RENDERING方法)。在AppleDevice上能快速地运行游戏图形,是因为其使用了处理速度最快的PowerVR图形处理芯片。而且,Apple使用了新一代的metal图形库(graphic library),也是一大亮点。

Tile-based deferred rendering的方法会在后面详细介绍。

2013年,专注于渲染引擎开发的Leadwerks Software公司在GDC(Game developers conference)上,用new iPad演示了延迟渲染(Deferred rendering)。

在此背景下,我(作者)以在DEVCLAN公司mobile game studio department工作时,2011年左右开发的一款Casual defense game为基础,和一名组员一起开始制作简单的graphics prototype。

和预想的一样,为了新一代的mobile graphics而制作的prototype,取得了不错的成绩。

2011年左右的mobile game市场正处于以开发者为中心,急速成长的初级阶段。

当时最具人气的是《Angry bird》这款游戏。于是,在那段时间里,有许多游戏纷纷效仿《Angry bird》的2D风格。

2011年初的时候,Android base mobile devices的世界市场占有率并不高。

自iPhone3GS上市后,一直到iPhone4上市的2012年的这几年间,使用者和开发者都开始关注Mobile Device的硬件。开发3D游戏的公司开始正式地开发smart phone game。之后,iPAD1问世。在那之前,并没有太多人关注mobile AP。

不断进步的mobile high technology…

因为我们正在讨论研究3D游戏开发的话题,所以下面稍微提一下与此相关的未来GPU环境的变化趋势。

Imagination tech PowerVR Ray traced soft shadow

PowerVR的Tile based Redering

与NVIDIA 或ATI 的GPU 不同的是,“PowerVR”系列的渲染引擎并没有使用Z缓存(Z Buffer)。

最近新的Z缓存(Z Buffer)的原理是,Buffer记录了Polygon的每个 pixel 和观察者的距离,即使在Polygon的显示顺序被打乱的情况下,也可以判断几个要显示的Polygon的位置关系并进行正确地显示。Z Buffer是不可或缺的结构。

“PowerVR”没有使用Z缓存(Z Buffer),其使用的”Tile Based Deferred Rendering(TBDR)“使用法最大的优点是避免了反复进行点在多边形内部的判断,提高了效率。

“基于格子的渲染(Tile Based)“,将需要渲染的画面分成一个个的tile,每一个tile只需渲染一次。基本设定的tile尺寸为16×16像素(pixel),可以通过GPU设置更改。

在图形应用程序(游戏引擎等)中,输入渲染画面的命令,读取命令后进行vertex shader处理,算出哪一个Polygon的哪一个部分对应哪个tile(也要考虑Polygon可能会对应多个tile的情况).

这时,如果新加入的Polygon被已经被划分好tile的Polygon挡住的话,应该把挡住它的Polygon删掉。(如果已经被划分好tile的Polygon是半透明的话就没有关系)

添加完那个场景所需的全部Polygon后,开始进行渲染。

渲染在各个tile里同时进行。GPU Core里的流水线如果是复数的话,一次性渲染的tile的数量就会增加。

那么我们下面来看一下,在tile里进行的像素渲染。

在由像素排列的几个Polygon之中,像素着色器中只对视觉距离最近的Polygon的像素进行阴影处理,再输出进行渲染。在有半透明Polygon的情况下,像素着色器要再次对位于其后面的Polygon进行阴影处理,就会使工作负荷加重。“PowerVR”也是如此。

将Polygon分成tile,然后以tile为单位完成基本处理。顶点的光照以及像素的光照都留到之后再处理。因此,将它称为“基于区块的延迟渲染(Tile Based Deferred Rendering)“。

“PowerVR”体系结构的优点是?

右边的图片是“PowerVR SGX5”系列的内部区块结构图。

“Vertex Data Master”是管理Polygon的顶点数据的区块,“Coarse Grain Scheduler(CGS)”是以后管理通用Shader unit的区块,“Universal Scalable Shader Engine(USSE)”是管理起用或发布指令的区块。

「Tiling Co-Processor」管理变换成画面坐标轴的Polygon的tile划分,为了像素渲染进行准备的地方。

“Pixel Data Master”是收集实际像素渲染相关数据的区块。经过“CGS”,“USSE”起用通用Shader unit,在进行像素阴影处理。“Texturing Co-Processor”是管理纹理unit的区块。Pixel Co-Processor收集输出的像素值。

“TBDR”的优点

没有Z buffer,内存的使用率高

不访问Z buffer,减少开销

不用担心渲染顺序,会自动作半透明处理

1和2部分耗电比较少。因为“PowerVR” 这个省电的性能,最近的便携式设备和Embedded设备的节电能力都有所提高。

其相较于一般的GPU,在渲染前的计算量很大。但是受到“比起访问内存的次数增多要好”的普遍观点的影响, “PowerVR“会继续使用这一体系结构,并不断优化。

GPU(图形处理器) ARCHITECTURE的变迁史

Written by JP

上面我们已经了解了CPU和GPU之间的中转是由graphics driver software来承担的,接下来我们来了解一下GPU硬件本身的构造。

著名的游戏引擎虚幻引擎(Unreal Engine)Epic Games的Unreal window用PC游戏是在1998年公布的。当时因为还是软件渲染时代,坐标转换矩阵计算是在CPU中进行的。

1999年NVIDIA发布了Geforce 256显卡,因为硬件是T&L(transform & lighting),矩阵计算和Multiply accumulate operation这些固定功能是由硬件来实现的,从这个时候开始,3D PC游戏的坐标转换将在GPU中实现。

单机游戏机中,在2000年发布的索尼Playstation2中CPU Emotion Engine的向量运算单位已经实现了几何处理,2001年发售的任天堂GameCube在GPU Flipper上实现了硬件T&L。

2000年微软发布了window用图形API DirectX 8。

DirectX 8不是固定功能,而是搭载了用户可以自定义编写的软件管线的硬件Shader,前提得是Programmable shader架构的GPU。

Shader分为两种,处理几何的Vertex Shader和处理Pixel的Pixel Shader,各自内部分别实现了个别硬件Block。

在OpenGL/OpenGL-ES中,把在DirectX中叫做Pixel shader的词汇称之为Fragment shader。

2001年发布了支持DiectX 8的操作系统windows XP和Nvidia GPU Geforce 3。

同年,发售的微软单机游戏机 ‘XBOX’搭载了支持自定义的Geforce 3,并支持Programmable shader。

渲染就是为了表现出3D立体感,给物件赋予由Shading这种模型现象而产生的阴影和灯光效果。

灯光、阴影处理等影响渲染结果的处理有很多,所以Shading这个词汇作为现代用语,指的是使用GPU来渲染的一般表现。

把在GPU硬件Shader中运行的程序叫做Shader Program,有时候干脆就叫做Shader。

在这之后,在2005年发售的微软XBOX 360中采用的ATI GPU Xenos,采用了Unified shader,这是一个很大的突破。

Unified shader作为同一硬件,在Shader process 中,同时处理vertex shader和Pixel shader两边,会根据各自处理阶段和每个游戏特性的不同会更换适合各个处理负荷的资源分配,在Shader process 方面能保持road平衡。

这边Unified shader process是以stream processing unit来实现的,具有5要素的VLIW(Very Long Instruction Word,超长命令) ISA。

5要素就是为了Vector4和Matrix4x4运算的 XYZW的4unit,超越函数和为了形态变换处理的T unit合在一起叫做VLIW5。

在支持Unified shader以后,作为大规模并行计算机(Massively parallel computer)的概念也渐渐明确下来,分支预测也逐渐加强,GPGPU处理为了不一直停留于图形处理,逐渐开始使用GPU。

这种趋势一直持续到现在为止,手机用的GPU,每种最新的型号都采用了Unified shader。现在比较有代表性的GPU架构(开发公司)如下:

– Mali/Midgard(ARM)

– Adreno

– Tegra

– PowerVR

最新型号都支持OpenGL ES 3.1。其中Mali的最新型号不是VLIW5,采用的是省略了T unit的VLIW4,把使用的并不是很多的T unit给省略了,把这部分又分配给了其它地方,处理速度就提高了。而且,Adreno, Tegra, PowerVR的最新型号用的也不是VLIW,采用的是接近于一般CPU ISA的Scalar processor。Scalar processor因为不是向量计算用SoA形式,所以处理一般AoS形式的数据也是很快的。

随着Shader program变得越来越复杂,这么做就是为了应对除了向量运算以外增加的处理。

虽然它是GPU core,但是实际搭载在手机上的不仅仅是GPU,而是把和CPU通信的通信调制解调器等相关部件都一并搭载在一个芯片上的 SoC(System on Chip)。apple A8,高通骁龙,Nvidia Tegra 等公司从ARM拿到许可,把CPU芯片也包含在了SoC上。

手机GPU的Die-Size(半导体芯片面积)因为手机form factor的尺寸很小,比PC用台式GPU要小很多,性能也要差很多。但是,现在手机GPU的Die-Size也有逐渐变大的趋势,以FLOPS来表示的浮动小数点运算性能来看, iPhone 6的GPU比iPhone 5的GPU的运算性能要高4倍,性能提高的非常快。正如以哪个硬件为对象,优化的内容就完全不一样,开发手机软件的时候,作为我们发布对象的市场是哪个,需要慎重考虑。

系统内存空间虽然也会越来越大,但是正如GPU性能的提升和画面分辨率的提升并没有形成正比,所以内存空间依旧是稀有资源。

而且,和在SoC外面的又远又慢的系统内存的access是通过公交(路径,Bus)实现的,它和CPU,GPU消耗的电力和产生的热量是类似的,根据电池消耗和Soc温度调节功能的不同,可能会成为导致性能低下的原因,所以尽可能减少对系统内存的access。

我们看下PowerVR Series7XT的内部结构,心脏部位多数是Unified shading cluster,USC)的集合。USC即是scalar运算引擎,又是一般使用的浮点型单精度浮动小数点(FP16),也支持double型二倍精度浮动小数点(FP32)的运算。GPU整体作为 ALU(arithmetic logic unit,运算装置)搭载的处理器核数量最大已经提高到了512个。

作为手机GPU,PowerVR的传统特征是所谓的TBDR(Tile based deffered rendering)方式。

Viewport变换结束后,把画面分成小的tile(bin),把属于1 tile内的临近区域的Geometry集合相关的Pointer转送到搭载于GPU Chip上的小的、快的专用内存,像素处理好之后,把结果记录于系统内存的Frame buffer。此时,先计算物件的前后关系,根据Over-load把不需要的Pixel shader处理功能都删掉,运行Deffered rendering(延迟渲染)。

并没有采用PC用台式GPU的Tile分配,而是采用了简单的 IMR(Immediate mode rendering)方式。

内存带域策略来看,利用硬件支持的压缩格式虽然效果也挺好的,PowerVR支持自己的贴图压缩格式PVRTC。

安卓设备主流Mali或者Adreno的GPU仅实现了除了deferred rendering的TBR(Tile based rendering)。

现在,手机设备1080P以上也成了标准,分辨率和PC环境也没啥区别,Pixel shader处理比重也升高了。

分tile来渲染的方式,也有缺点,因为随着顶点数的增加,Tile overhead会增加,所以要控制顶点数量,以防顶点处理成为瓶颈。而且,在渲染中,如果要试图关于Frame buffer的accessh和复数渲染目标的连接的话,因为中间状态要存储到系统内存,会导致严重性能问题。

Low Level Graphics API. ( 低阶图形应用编程界面)

安卓因为采用了各种厂商生产的GPU,如果想依靠特定GPU机型的特性或者扩展功能来进行优化的话,根据GPU型号,需要单独的对策。而且,随着GPU的不同,存在特定命令慢或者快等各种特性,仅仅依靠对应最小公分母(lowest common denominator)是不够的,要仔细的在大多数的机型上做实际测试,游戏跑起来对性能上有没有影响等,如果发现问题的话,得个别处理。

作为标准API,在安卓5.0中,提供了Android Extention pack(AEP),OpenGL ES 3.2中也能使用相关的功能。

OpenGL ES 3.2支持安卓6.0以上。

IOS的话,苹果设备因为只使用PowerVR GPU,如果不考虑旧机型的话,可以期待接近于单机游戏机开发用特定的硬件。

举例,在Xcode的profiler Instruments中,在一个叫做Tiler Utilization的项目中能知道TBDR的使用状况。

在Unity中激活 IL2CPP,以IOS版本Build的时候,以生成的Xcode为对象,使用Instuments的话,根据IL2CPP,函数的符号名被翻译为C++代码并应用,如果在Xcode项目选项中把dysm符号文件生成选项激活的话,使用Instruments,可以实施一定程度的profiling

而且,IOS,从iPhone 5S之后,往OpenGL ES 3.0新增了支持独立低阶图形API Metal。

OpenGL ES设备的运行,在APP中虽然无法控制,Metal追求的是效率化以及图形处理的高速化。

-现在,图形驱动所做的一些处理在APP中一定程度已经能控制了,使一些不需要的处理在APP中能自主判断并省略。

-把Command Que以Multi-Thread来对应,提高Multi core CPU运转率,缓解了CPU的瓶颈。

而且,作为记录Shader Program的Shader语言,用的是基于C++ 11的Metal shading Language。

在Unity中,Build Settings的Player Settings中,可以在IOS设置中选择Metal API,和iPhone 5S相比,在之前的机型中是无法使用的。所以,开发app的时候,就没有必要移植使用Metal的代码了。

安卓也是,像Metal一样,提供低阶图形API。计划在手机设备上实现低阶图形API标准化的Khronos Group发表了要推出基于独立AMD低阶图形API Mantle的Vulcan API,安卓也是,会像OpenGL ES一样,以标准规格采用Vulcan。

Heterogeneous System Architectur (异构系统架构)

把具有相同性质的芯片整合到一个处理器(多核心处理器CUP或者GPU)上的叫做Homogeneous,相反,把两种性质完全不同的芯片整合到一个处理器上的叫做Heterogeneous。

这里所说的Homogeneous整合是多核心处理,Heterogeneous整合是HSA。

HSA会把Heterogeneous的CPU和GPU看作是一个运算体来生成一个抽象的阶层,这样CPU和GPU之间就没有必要进行数据往来了。即,HSA就是把CPU和GPU整合到一个芯片上,在两者之间追求紧密的联系。

随着GPU的不断发展,就是想把它用作为其它的新的运算装置,从那时开始就是不断发现问题,解决问题的过程。简单地说,这种架构让GPGPU比原来更方便利用了。

现在我们整体来看下包含CPU和GPU的系统架构,参考的是用于Sony Xperia Z4等机型的SOC 高通骁龙810内部数据流。

64位多核心CPU和Adreno GPU通信,结构是引用两边的系统内存上的几何,贴图和shader。

虽然,PC上CPU和GPU有各自专用的内存,但是,单机游戏机和手机设备的话,一般都是单一系统内存,CPU和GPU都能访问的一个整合的内存结构(Unified memory architecture,UMA)。

内存Bus如果单一的话,不管对耗电还是对内存芯片配线面积都是有利的。

UMA的优点是不管内存芯片多小,内存空间都能有效利用。

当CPU内存使用的少的时候,GPU相对可以使用更多的内存。同时,UMA的缺点是,CPU和GPU相互会抢内存带域,可能相互会干涉处理。

而且,不是UMA的时候,当CPU和GPU使用不同类型的内存芯片的时候,CPU使用低延迟的内存芯片,GPU使用的是宽带宽的内存芯片,按照处理器别,选用适合自己的work load,虽然能提高处理效率,但是像UMA这种情况又是无法妥协的。举个例子,以带宽优先,构成UMA,为了隐藏相对增长的Latency,要提高CPU的并行处理能力或者搭载更多的Cache.

虽然有同样的缺点,UMA在掌机中也利用的是除了减少内存芯片的种类,降低成本的优点外,因为是用所谓的Heterogeneous System Architectur,由CPU和GPU构成的异构处理器来编程控制的,和为了处理仅仅依靠CPU无法处理的并列computing workload的系统构成很适合。

关于通用并列处理,专门为Heterogeneous Computing发布了叫做OpenCL的API。

以游戏来说,原来在CPU上发生的物理运算和AI处理,现在在GPU上也能进行,并且CPU和CPU可以渐渐的相互通信,相互共享信息,Heterogeneous Architecture的优势也渐渐的突显出来了。手机设备上也同样,不仅仅局限于游戏,一般的软件也是同样,对图片处理和音频处理,物理处理这种高度的数据处理需求也在越来越大,往后用Heterogeneous Computing来优化应该是趋势。

中国移动设备用户的特征

http://www.getui.com/data-report/index.html

专门做智能手机推送服务的中国公司“个推”,可以通过对收集到的大数据资料进行分析,为客户提供所需的中国Android市场的行业报告。实际上,尽管不少的专业市场调研公司也能够提供中国智能手机市场的分析资料,但是“个推”提供的报告能深入分析不同Device的用户特征。特别是对于初创型公司而言,正确的市场数据显得尤为重要。

“个推”号称是“最专业的开发智能手机推送服务的公司”,在第三方推送服务市场中占有的份额达90%以上。“个推”提供Android和iOS推送SDK,通过推送SDK可以收集各种各样的数据,比起宏观的生产量和销售量的资料,可以获得用户使用习惯和的主要使用的APP产品的真实信息,因此这对于想要开发垂直市场的初创型企业而言,是十分具有价值的资料。

下面的内容的编写参考了5月21日发布在动点科技(TechNode)网站上的新闻报道,实时分析资料可以在“个推”的平台上找到。

智能手机:小米红米系列手机发展势头迅猛,出货量破1000万台

据相关资料显示,在2015年2月至4月间,小米系列的智能手机在中国Android手机市场的发展势头迅猛。今年2月,在中国市场占有率方面,小米的红米手机占据了第一名,第二,三名分别是MI3和MI2S。3月和4月份的前三名排位没有发生变化,第4至第10名的排位变化也不大。

而且通过“个推“平台,不仅能知道各种智能手机的市场占有率,而且也能知道每一个机种的用户年龄层。

《2015年2月,小米的 “红米”在中国Android市场的占有率为6.12%,18岁~24岁年龄层的用户占到了总体的85.26%》

《在中国Android智能手机市场中,使用4.2.2版本以上Android操作系统的用户达到了70%以上》

태그:

댓글 남기기

MY NAME IS JP에서 더 알아보기

지금 구독하여 계속 읽고 전체 아카이브에 액세스하세요.

Continue reading