iOS对于游戏的运行到底有什么优化!
gpu吧
全部回复
仅看楼主
level 13
这个问题见的比较多,很多人都会说出iOS对于游戏有优化加成,但具体可能又不太了解怎么优化法,我这里简单说说
首先iOS之所以运行效率高,是因为iOS这种不完全的多任务机制,在执行单个app的时候会更专注,效率自然也会提高了。
你们可以发现iOS一路发展过来,越注重多任务,单个任务的执行效率就变得越低,硬件要求也变得越高。
关于任务主要两点:
1.后台--除了几个指定的服务,iOS不允许后台继续运行app
2.状态--进入后台的app,状态会被暂停,此时前台app享受资源优先权
然后,关于调用了GPU硬件(OpenGL ES)的app,又会有更深的优化,简单介绍下其中几点:
1.这些app启动后,首先会初始化资源,然后打包进OpenGL ES对象,这种初始化牺牲一定时间来提升渲染性能。
2.这些app采用动态资源和渲染命令循环的方式来提升CPU和GPU的并行处理。
3.这些app进入后台后,其他内存会被需要的app释放,但纹理,模型等数据会被保留以便切换后更快恢复(配合iOS7之后新加入的background fetch效果拔群),除非内存完全不够用,那么app会被自动销毁。
最后还有Metal更多的加成,简单概括一下:
1.大幅提升drawcall,节省大量的CPU消耗
2.开发者,引擎可以做更多API的操作,避免很多不必要的操作和运算
3.Metal对iOS设备和PowerVR的硬件进行了匹配,又可以节省很多API的操作
Metal主要节省了CPU的消耗,在低CPU开销下实现更好的物理,粒子,动画等效果,增加更多的画面元素(烟雾,阴影,水花等等)。
总而言之,iOS在移动操作系统平台的游戏方面做的确实相当不错。
2015年03月01日 00点03分 1
level 13
怎么老是出现莫名其妙的换行,好不爽[阴险]
2015年03月01日 00点03分 2
level 6
这就是有舍有得嘛 给LZ赞一个
2015年03月01日 00点03分 3
level 14
吧主的csdn账号有没有积分?
2015年03月02日 12点03分 4
你说了我去试了下,发现账号密码都忘了[汗] 好像只有知乎有,这些都很久不用了
2015年03月02日 15点03分
回复
crayon������
:吧主太厉害了,还是CSDN的大神啊,[大拇指]
2015年04月25日 00点04分
回复
ˮ֮����
:然而并不是大神
2015年04月27日 05点04分
回复
crayon������
:太谦虚了,真正厉害的都这样
2015年04月27日 08点04分
level 10
好赞顶,[真棒]转载去
2015年03月05日 15点03分 5
level 15
厉害
2015年03月06日 04点03分 6
level 12
老黄的THD和这个是一个原理吗[疑问]
2015年03月07日 10点03分 7
当然不一样,老黄那个是商业性质的,赞助的
2015年03月08日 10点03分
另外,老黄的Tegra开发套件里对性能和图形有很强的针对性,鼓励开发者开发大型3D游戏,这也算一种优化吧
2015年03月08日 11点03分
level 4
赞一个[真棒]
2015年03月09日 05点03分 8
level 14
metal之前还是单任务的优势吧,安卓后台限制也能达到这样的效果吧
2015年03月10日 01点03分 9
这说起来挺麻烦的,我再开一楼补充一下吧
2015年03月10日 08点03分
level 13
要和安卓比较的话
首先在ios中OpenGL ES是重点API之一,ios在针对OpenGL ES的开发上很早就加入了不少提升性能和效率的方案和特性,这比安卓的OpenGL ES发展起步要来的早。
ios设计初衷就是单任务,而安卓是多任务,以此为基础,两个系统的设计和机制就出现了较大的差异。为了提升并行处理的效率,ios的任务会被GCD调度分解成多个子任务,并自动分配任务到线程上。对于OpenGL ES app,OpenGL ES的各项功能首先生成对应的context,然后在ios中每个context会启动一个线程,这样OpenGL ES本身就成了多线程,然后对应到各个子任务,提升并行效率(命令流),从而提升硬件利用效率和性能。
在安卓中,首先我们假设已经关闭了后台服务,但是即便如此,安卓的app依然必须符合安卓的生命周期管理和调度,所以app的结构和机制不会变。对于OpenGL ES这种复杂和吃硬件的app,会开启一个独立的activity和service,app运行在主线程之下,对于一般的app service都运行在这个主线程之下,而对于OpenGL ES等高硬件要求的app会开启单独的线程,调用OpenGL ES Package,不过最终他们都是运行在主UI线程之下,并没有像ios那样的细分化。这也导致了即使关闭了后台,单个程序的硬件利用率依然不及ios,以及并行化也没法做到像ios那样高效,所以安卓上多核心利用率并没有那么高,更多的是依赖于核心的高频率,这又导致GPU的idle增加,影响整体渲染效率。
不过一个开源开放的系统,又要兼顾平台兼容性,跨平台性,又要高性能,又要做成多任务,能做成这样已经很了不起了,并且进步也很快。相反让苹果做一个开放系统,架构也必须大改,还未必能做到这样。
2015年03月10日 08点03分 10
那看起来要玩游戏还是要买苹果啊,苹果一出metal差距就更大了。不过为什么跑分结果安卓和苹果没差距?
2015年03月12日 03点03分
回复
ͬ����
:跑分软件一般用标准化方案吧,要针对性优化的话就失去对比性了。现在的跑分软件应该是基于标准化的opengl es的,但是无论苹果还是安卓都支持基于具体gpu硬件特性的api拓展的,我大概看了下gfxbench的新闻,貌似是基于系统的标准化api的
2015年03月12日 07点03分
但是安卓中拓展特性得用EGL去调用gpu厂商提供的具体的library,也就是说应该是不考虑针对性优化的,既然不考虑针对性优化,那他们的跑分接近就变得可以理解了
2015年03月12日 07点03分
回复
crayon������
:那也就是说所谓的xx神油还是有可能存在的,只要厂商塞钱做优化
2015年03月12日 07点03分
level 12
学习了,期待更多知识
2015年03月12日 03点03分 11
终于出现了[呼~]
2015年03月12日 08点03分
level 14
顶了!
   --你好,现在为您报时:现在是北京时间 2015年03月13日周五 07时05分15秒596毫秒#       
2015年03月12日 23点03分 12
level 9
好帖[勉强]
2015年03月18日 04点03分 13
level 12
[钱]吧主专业的吗?
2015年03月24日 15点03分 14
level 9
楼主精辟 赞一个
2015年04月26日 12点04分 15
level 12
下意识地看了下发贴时间!
2015年04月26日 15点04分 16
level 7
涨姿势了!楼主给力[太开心]
2015年04月27日 13点04分 17
1