近日Google负责Android平台编程语言的Lars Bergstrom和负责低级操作系统的Greg Simon在开源博客撰文分享Google在推进Android在RISC-V指令集架构上运行的最新成果。目前Google不仅接受补丁还开始在Android中成熟地支持 RISC-V。文章表示,当前针对Android Runtime(ART)的优化仍在进行中。
今年中国峰会上玄铁团队也分享了在ART上的一些工作和社区进展,邀请技术专家夏立方带来在ART上的技术分享。11月7日在北美峰会上玄铁团队也将带来最新ART优化工作进展,敬请关注。
RISC-V 在Android上的进展
回顾玄铁安卓的技术开发之旅,从2021年开始在 RISC-V 上移植Android 10,到现在即将迎来首款基于Android 的 RISC-V 产品,参与了 RISC-V 的重要时刻。
2021年04月 先后移植了Android 10和Android 12版本
2021年08月 在 RISC-V 基金会成立了Android SIG
2021年09月 开始在谷歌的AOSP主线上提交patch
2022年12月 在XuanTie TH1520测试板上就跑通了CTS和VTS,并在美国峰会上做了技术分享和demo展示
2023年01月 Google宣布AOSP会以“Tier-1”级别支持 RISC-V
2023年07月 玄铁生态伙伴发布支持AOSP主线的开发板
2024年 基于Android on RISC-V 的产品原型即将面世
ART
ART是Android的framework,是非常核心的一个组件。很多应用的运行,都离不开ART虚拟。
ART的组成部分是解释器、GC、Runtime还有Dex JNI的编译器,以及汇编器。除了这些以外,基于ART还有一些其他的工具,类比于我们的传统的GCC,它有dex2oat工具用来编译dex字节码,生成OAT文件,oatdump用来反汇编OAT文件。
在 RISC-V 上,我们需要porting的工作包括:解释器、Runtime、Dex Compiler、JNI Compiler和宏汇编器。
优化工作
玄铁在ART上做的一些优化工作,主要是集中在Compiler以及Runtime的部分。在Compiler部分,我们的优化主要实现了八十多个intrinsics接口,同时增加了一部分指令的优化。在Code Generator里,实现了90+ instruction visitor。Micro Assemble主要是针对 RISC-V 指令集的支持,目前支持IMAFD的标准指令集以及玄铁扩展指令集。
在Runtime里面的话,我们实现了一个新的解释器Nterp,是Android 12里新引入的一个解释器。我们还对一些Quick Entries的汇编实现采用玄铁扩展指令集进行重写优化。除了ART,我们还在bionic中做了优化,主要是集中在C库和数学库,在C库中,采用Vector指令集对memcpy,memset,memcmp,strcpy,strcmp等基础函数进行重写优化。而数学库则采用了llvm编译器对builtin函数进行优化。
玄铁扩展指令集优化收益
在过去的一年里,除了升级Android10到Android12以外,我们花费了很大的精力在使用采用玄铁扩展集对ART进行优化。可以从以下的几个benchmark对比数据看到玄铁扩展指令集带来的收益(数据截至2023年10月)。
首先是Android Java虚拟机一个比较早的跑分工具Caffinemark,可以看到玄铁扩展指令集对于整数计算、循环都有15%以上的收益,对于其他几项也都是正向的收益。
第二个是关于数学函数的一个benchmark,SCIMath2。在这个benchmark上有15%以上的提升。
最后一部分是ART自带的一些benchmark,以及一些面向编程语言benchmark,在这些benchmark上也有正向的提升。对于JObjectBenchmark提升尤其明显,接近5倍的提升。
ART主线Upstream工作分享
玄铁团队在ART主线上的支持工作
去年的九月份开始AOSP主线支持 RISC-V 的编译,之后我们陆续在今年三月支持了纯C++的解释器支持;五月份在Google团队的支持下支持了Nterp解释器;六月份完成对汇编器的支持。目前的工作主要是集中编译器和反汇编。
截至目前为止,玄铁团队贡献了超过七十多个的commit。
ART未来支持计划
在过去的一段时间里,我们参与社区合作,社区已完成:
Dex编译器中的CodeGen,反汇编工作
Micro assembler中的Zb*扩展
QuickEntries的实现
目前正在进行的是实现Dex Compiler中的Intrinsics。在后续的工作计划中,主要集中在两个部分:
Vector 1.0的支持
持续性的性能分析和优化工作
我们希望有更多的开发者可以加入,参与对ART的贡献。
审核编辑:黄飞
全部0条评论
快来发表一下你的评论吧 !