浅析玄铁团队RISC-V 在Android上的进展

描述

近日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的贡献。

审核编辑:黄飞

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分