LLVM触发非主流方案春天的到来

来源:互联网 发布:羞辱2破解版优化补丁 编辑:程序博客网 时间:2024/06/05 02:04

【作者】杨碧玲

在人们的印象中,便携消费电子领域一直都是Android+ARM架构的天下,但随着Google在Android中加入LLVM技术,该领域以MIPS为代表的非主流方案也开始迎来春天。

在去年年底的时候,也就是在Google发布Android 4.0两周后,MIPS和北京君正携手率先发布了全球首款采用Android 4.0操作系统的平板电脑。这款平板电脑使用的是基于MIPS架构由君正自主研发的xBurst系列CPU芯片。这一动作引来了业界对MIPS进军便携消费电子市场以及Android跨平台应用的关注,也引起了业内对Android+MIPS架构的质疑。虽然MIPS不停地摆事实讲道理来表明MIPS架构的CPU在Android上应用的可靠性和高效性,但是目前还是有很多人抱着怀疑的态度来看MIPS和Android的整合,他们都有这样的疑问:为智能手机而开发的Android操作系统在MIPS架构下能跑得好吗?即使Android是能移植到MIPS处理器上,但是应用程序的兼容性会好吗?Google的CTS测试能不能过呢?


“MIPS是更为高效的架构,MIPS平台能很好地支持Android操作系统,过CTS测试也是完全没有问题的。”在今年的“深圳(国际)集成电路技术创新与应用展”高峰论坛上,MIPS中国区市场总监费浙平在努力打消大家的疑虑。“我们很高兴地看到,相比于之前我们取得了比较大的突破,并且比预计的效果要好。我们在市场上也可以看到很多MIPS+Android的产品,包括智能手机、平板电脑、智能电视等等。但我们必须得承认,从市场份额上来看,无论是MIPS还是X86,在便携移动领域都还是非主流的架构。”他表示。


其实在Android 2.0版本发布后,MIPS就一直在跟进Android的发展,而MIPS在Android上的突破其实是始于3.0版本,在这以前,Android对MIPS的支持确实不到位,并且MIPS也没有做手机版本的架构。而在3.0版本之后,Android开始对MIPS全面支持,这也成为MIPS在便携移动市场的一个重要转折点。

andriod apps.jpg


当然不仅只有MIPS在Android上努力取得突破,Google也在用更开放的策略来推动Android操作系统跨平台的发展。从Android 3.0版本开始,Google定位开始转向跨平台发展,但是应用程序的兼容性问题也开始浮现,这也促使着Google着手解决跨平台兼容性的问题。

LLVM助力Android跨平台发展


Google一开始就宣称基于Android操作系统的App是独立于平台、与底层硬件无关的,不同的硬件平台都可以无缝兼容。可是为什么实际应用中却会产生应用程序兼容性的问题呢?费浙平指出,这是由Android的应用程序开发工具链NDK引起的。


什么是NDK,到底它是如何引起兼容性问题的?据了解,Google提供给Android应用程序开发者的接口工具主要有两套,第一套是使用Java的SDK,第二套则是使用C/C++的NDK,用这两种不同语言开发的App会经过两条不同的工具链,最后生成一个APK文件。两种不同的编译路径会产生跟CPU相关的两种不同情况,如果是采用Java语言开发的App,经过SDK这条工具链编译生成的APK文件确实是与平台无关,不同平台能做到百分百兼容,无论是在ARM、X86还是MIPS抑或是其他CPU平台都是兼容的。但如果是基于C/C++开发的App,经过的工具链就是NDK,编译后产生的APK文件会带有CPU相关的二进制文件,具有CPU依赖性,那就会产生平台的不兼容性。例如某个用C/C++开发的App如果被编译为带有ARM CPU二进制信息的APK文件,那它一定是不能在MIPS或X86的平台上运行的。


那么使用SDK和NDK工具链的App分别有多少?“我们统计最常用的2万个App应用,通过SDK编译的占90%多 一些,而使用NDK编译的则占10%左右。两者数量比例大约为10:1,所以单纯从数量角度上来说通过NDK编译的App比重并不算大。也许大家有的也会认为,没有这10%的APP,问题并不大,但是毕竟这是一个很大的缺失,在一个很大的竞争市场如果有一个弱点的话,就会在残酷的竞争当中处于被动挨打的地位。”费浙平说道。不仅如此,因为比较大型的App一般会采用C++来开发,大型App使用和下载的程度都比较高,平台间的不兼容性所产生的影响就远大于量化的10%。


应用程序跨平台的不兼容性,无论对Google、Android阵营的各个公司还是消费者来说都是一件不好的事情。事实上,对于这个问题Google也是非常头痛的,该公司当然希望Android操作系统出现在地球的每一个终端上,无论是手机、平板电脑还是电视,如果App存在CPU兼容性问题的话,Android操作系统的大生态圈的发展会受到制约。另一方面,如果单纯使用Java的路径来编译,引入Java VM又会带来相关法律纠纷和巨额索赔要求的麻烦,这是Google不愿意再碰到的。


“Google正在尝试使用一个非常重要的技术来解决上述问题,这个技术就是LLVM(Low Level Virtual Machine,低阶虚拟机)。”费浙平表示。LLVM是一个开放、免费的编译器技术,是源于2000年伊利诺伊大学厄巴纳-香槟分校Vikram Adve与Chris Lattner的研究发展而成的一个开源编译器项目,以C++写成。LLVM在前端支持绝大多数高级编程语言,在后端能支持CPU、GPU、DSP等多种处理器。其最大的特点在于APK文件在BitCode层打包,能完全与处理器架构无关。

llvm.jpg


LLVM采用现代编译技术来提高编译能力,这个编译器划分为前端和后端两个编译步骤,两个编译步骤之间有一个叫BitCode的中间层。以C/C++为例,以往编译器的编译过程是直接将C/C++转换为二进制代码,而LLVM做法是把C/C++通过前端编译成BitCode,因为这个中间层不是针对某一个CPU来进行编译的,它跟CPU无关,然后在执行过程当中BitCode会在后端进行第二次翻译,这时在设备端才把BitCode转换成本地的二进制机器码进行执行。把APK文件在BitCode层打包,APK文件就是与CPU无关的,也就不存在跨平台兼容性的问题。


“其实苹果公司从2005年开始就在用LLVM开发苹果设备的应用程序系统,可喜的是,我们在Honeycomb版本的Android代码树中也看到了LLVM的身影。”费浙平说道。他表示,虽然目前LLVM的使用并不是很成熟,不过可以想象,以LLVM的特点和优势,一旦它发展完善,那么在Android中必将会使用LLVM取代NDK,再进一步想象,LLVM还将支持Java甚至苹果的Object C,以后无论是使用C/C++还是Java写的App都可以通过LLVM来进行编译,那Android将真正不会存在平台兼容性的问题,甚至基于苹果操作系统开发的应用程序也可以轻松地移植到Android平台上来,这种跨平台的完美兼容性,无论对Google还是App开发者、芯片公司、方案公司、产品公司、消费者来说都是非常有利的。


从Google选择MIPS架构而非ARM架构作为Android 4.0平板的首发、邀请X86加入Android阵营,可以看到Google开始对MIPS、X86提供倾向性的支持,以及其打造更大的新兴生态圈的决心,而采用LLVM技术则为Android的跨平台生态圈铺就了一条宽阔的罗马大道,也触发了非主流方案的生机。


“在Android的世界里,非主流方案的春天正在到来,因为Android对平台的兼容性将会越来越好,这也为移动便携领域除ARM以外的非主流平台如MIPS和X86提供了许多机会。”费浙平说道,“从CPU架构执行效率的角度来讲的话,MIPS架构的功耗是非常低的,MIPS能帮助用户在手机、平板电脑等领域取得性能和功耗的突破;从差异化的角度来看,MIPS可以给大家提供更多的选择和提升竞争力,我们也希望大家能给我们更多的关注和掌声。”

原创粉丝点击