振作起来 Android 开发者,一个新的 Android 编译器即将到来
已发表: 2022-03-11多年来,碎片化一直是 Android 开发者和消费者感到沮丧的根源。 现在看来事情会在好转之前变得更糟。 新的 Android 编译器又来了,硬件方面有一些值得注意的发展,这可能会影响开发人员。
由于 Dalvik 被排除在外,许多人预计 Google 新的 64 位 ART 运行时会持续多年,它可能会继续存在,但在不久的将来它将进行重大改革。 除了提供对 64 位硬件的支持外,ART 还引入了提前 (AOT) 编译,而 Dalvik 是即时 (JIT) 编译器。 新的优化编译器将解锁更多可能性。
至于硬件发展,智能手机系统芯片行业有一些新趋势和一些新老玩家,但我稍后会谈到。
首先,让我们看一下 Google 的运行时计划。
Dalvik, ART, ART 与新的 Android 编译器
ART 于去年随 Android 5.0 一起推出,在 Nexus 9 和 Nexus 6 上推出,尽管后者使用 32 位 ARMv7-A CPU。 然而,ART 并不是从头开始设计的,它实际上是 Dalvik 的演变,它远离了 JIT。
Dalvik 会根据需要即时编译应用程序。 显然,这会增加更多的 CPU 负载,增加启动应用程序所需的时间,并影响电池寿命。 由于 ART 会提前编译所有内容,因此在安装时,它不必在每次设备启动应用程序时浪费时钟周期进行编译。 它可以带来更流畅的用户体验,同时降低功耗并延长电池寿命。
那么谷歌接下来会做什么呢?
由于 ART 是为了利用新的 64 位 ARMv8 CPU 内核而开发的,该内核于去年年底开始上线,最初的编译器似乎是一种权宜之计。 这意味着上市时间是首要任务,而不是效率和优化。 这并不意味着 ART 只是一项拙劣的紧急工作,因为它不是; 运行时运行良好,得到了开发者和用户的好评。
然而,还有改进的空间,现在,谷歌似乎一直在努力改进编译器,而且这项工作可能早于 ART 的正式发布。 英国芯片设计师 ARM 最近透露了一些关于 Google 运行时计划的有趣事实,并指出了一种用于 ART 的新“优化”编译器。 新编译器提供中间表示 (IR),允许在代码生成之前对程序结构进行操作。 它使用单级中间表示,结构化为信息丰富的图,为编译器的架构感知部分提供更好的信息。
“快速”编译器使用两级中间表示,带有指令和变量的简单链表,但它在 IR 创建过程中丢失了重要信息。
ARM 声称新的“优化”编译器将提供许多显着优势,将其描述为编译器技术方面的“大跃进”。 编译器将为未来的优化提供更好的基础设施,并有助于提高代码质量。
优化和快速编译器关键特性
ARM 在一张幻灯片中概述了两种编译器之间的区别,声称“优化”编译器可以更有效地使用寄存器,更少溢出到堆栈,并且需要更少的代码来执行。
以下是 ARM 的说法:
Quick有一个非常简单的寄存器分配算法。
- IR 中缺乏信息
- 编译速度胜过复杂性——起源于 JIT
- 性能差——大量寄存器溢出到堆栈中
优化使用线性扫描寄存器分配。
- 性能和时间之间的完美平衡
- 使用活性分析
- 最小化寄存器溢出到堆栈”
尽管新编译器仍在开发中,但 ARM 分享了一些性能数据; 在综合 CPU 测试中,编译器产生了 15% 到 40% 范围内的性能提升。 编译速度提高了大约 8%。 然而,该公司警告说,随着新编译器的成熟,这些数字“每天都在变化”。
重点是实现与“快速”编译器的近乎平价,后者目前在编译速度和文件大小方面具有明显优势。
现在,它看起来像是一种权衡; 新的“优化”编译器在 CPU 密集型应用程序和综合基准测试中提供了令人印象深刻的性能改进,但文件增大了 10%,编译速度降低了约 8%。 虽然最后两个数字似乎被 CPU 性能提升所抵消,但请记住,它们将适用于每个应用程序,无论 CPU 负载如何,都会占用更有限的资源,例如 RAM 和存储空间。 请记住,以 64 位编译已经比以 32 位编译占用更多的 RAM。
编译速度和启动时间的任何降低也是一个令人担忧的问题,因为它会影响设备响应能力和用户体验。
多核 ARM 竞赛
无论运行时和编译器如何,另一个令人担忧的问题是基于 ARMv7-A 和 ARMv8 架构的多核处理器的流行。 八核热潮始于 2013 年,并很快被认为是廉价的营销噱头。 高通公司的一位高管甚至称八核处理器“愚蠢”和“愚蠢”,称该公司不会制造任何处理器,因为其工程师“并不愚蠢”。 这位高管还将 Apple A7 的 64 位支持描述为“噱头”。
快进两年,我的办公桌上有一部 64 位高通八核 Cortex-A53 智能手机,而这位高管的名牌上有不同的职位。
好像 8 核芯片还不够,明年我们将看到第一批基于 10 核应用处理器的设备。 第一款 10 核智能手机芯片来自联发科 Helio X20,它将配备三个 CPU 核心集群,称为 huge.Medium.TINY。 听起来很有趣,而且会变得更好; 我们将很快开始看到基于新一代英特尔处理器的第一款价格实惠的 Android 设备。
让我们看看 ARM 核心之战以及它们对开发人员和消费者的意义。 ARM SoC 八核设计有两个不同版本。 高端解决方案倾向于使用ARM的big.LITTLE布局,使用四个低功耗核心和四个大核心用于高负载。 第二种在芯片中粘贴 8 个 ARM CPU 内核的方法是使用相同的内核,或者在具有不同时钟速度的两个集群中使用相同的内核。
领先的移动芯片制造商倾向于在高端设备中使用 big.LITTLE 芯片和主流产品中的常规八核芯片。 这两种方法都有其优点和缺点,所以让我们仔细看看。
ARM big.LITTLE 与常规八核:
使用两个不同 CPU 内核的集群可以在 big.LITTLE 设计上实现良好的单线程性能和效率。 权衡是单个 Cortex-A57 内核的大小大致相当于四个小型 Cortex-A53 内核的大小,而且效率较低。
在具有不同时钟的两个集群中使用八个相同的内核或八个相同的内核,既经济又节能。 但是,单线程性能较低。
当前一代基于 ARMv8 内核的 big.LITTLE 设计无法使用最便宜的 28nm 制造节点。 即使在 20nm,一些设计也表现出很多节流,这限制了它们的持续性能。 基于 Cortex-A53 CPU 内核的标准八核可以在 28nm 中有效实现,因此芯片制造商不必使用 20nm 或 16/14nm FinFET 等尖端制造节点,从而降低成本。
我不想让你对芯片设计趋势感到厌烦,但对于 2015 年和 2016 年的移动处理器,请牢记一些重要的基础知识:
- 大多数芯片将使用 28nm 制造节点和 Cortex-A53 内核,限制了单线程性能。
- 大 Cortex-A57 内核在三星和高通的两个主要设计中实现,但其他芯片制造商似乎正在跳过它并等待 Cortex-A72 内核。
- 在接下来的 18 个月中,多线程性能将变得越来越重要。
- 除非 20nm 和 FinFET 节点变得更便宜(2016 年及以后),否则无法预期性能大幅提升。
- 10 核设计也即将推出。
所有这些点对 Android 开发者都有一定的影响。 只要芯片制造商在大多数智能手机和平板电脑芯片上都停留在 28nm 工艺上,开发人员就必须尽最大努力挖掘多线程性能并专注于效率。

ART 和新的编译器在提高性能和效率方面应该有很长的路要走,但它们无法打破物理定律。 旧的 32 位设计将不会在未来的许多设备中使用,即使是最便宜的设备也开始配备 64 位芯片和 Android 5.0。
尽管 Android 5.x 的用户群仍然相对较小,但它正在迅速增长,并且随着 100 至 150 美元的手机配备 64 位芯片和 Android 5.0 的到来,它的增长速度将会更快。 向 64 位 Android 的过渡进展顺利。
最大的问题是 Dalvik 什么时候会得到新的 Optimized 编译器。 它可能会在今年晚些时候推出,或者明年推出 Android 6.0; 现在说肯定还为时过早。
异构计算进入手机
还有一件事要记住; 移动图形功能变得越来越强大,尤其是在高端处理器上,因此芯片制造商在幕后做了大量工作,以便将它们用于游戏和视频解码以外的用途。 异构计算已经存在了几年,它允许 PC 将高度并行化的任务卸载到 GPU。
现在,同样的技术也出现在移动处理器上,有效地融合了 CPU 和 GPU 内核。 该方法将允许开发人员通过向 GPU 执行某些类型的程序(即 OpenCL 加载)来释放更多性能。 开发人员将能够专注于吞吐量,而处理器将自动处理 CPU 和 GPU 上的并行执行。
当然,这并不适用于所有应用程序并在所有情况下都可以减少负载,但在某些细分市场中,它应该会释放更多性能并有助于降低功耗。 根据负载,SoC 将自动决定如何处理代码,将 CPU 用于某些任务,同时将其他任务卸载到 GPU。
由于我们正在处理并行化的应用程序,因此该方法有望在图像处理方面产生最大的改进。 例如,如果您需要使用超分辨率和重新采样图像,则该过程可以在 OpenCL 中分为不同的阶段。 如果该过程涉及不同的阶段,例如find_neighbor
、 col_upsample
、 row_upsample
、 sub
和blur2
,则硬件将以最有效的方式在 CPU 和 GPU 内核之间分配负载,具体取决于哪种内核可以最好地处理给定任务大大地。 这不仅将性能提高一个数量级,而且还有助于降低功耗。
英特尔死而复生,它看起来很适合尸体
英特尔错过了移动革命,实际上将市场拱手让给了 ARM 及其硬件合作伙伴。 然而,这家美国芯片制造商有足够的资金和资源在替补席上呆上几年,然后卷土重来。
去年,英特尔为其平板电脑 Atom 处理器的销售提供补贴,在不到一年的时间里出货量翻了两番。 它现在将注意力转向配备新 SoFIA Atom x3 处理器的智能手机领域。 坦率地说,我不完全确定这些芯片是否应该被称为英特尔处理器,因为它们实际上并不是由芯片巨头生产的。 SoFIA 处理器是与中国芯片制造商合作设计的,预算紧张。 它们是在 28nm 节点上制造的,速度慢、体积小且价格便宜。
这可能会让一些不经意的观察者感到意外,但英特尔并不在意高端移动解决方案。 低端 SoFIA 部件将为价格在 50 美元到 150 美元之间的商品化 Android 手机提供动力。 首批设计将于 2015 年第二季度末开始出货,其中大部分将面向亚洲市场以及世界其他地区的新兴市场。 虽然我们可能会在北美和欧洲看到其中一些,但英特尔的重点似乎是中国和印度。
英特尔正在对冲其 Atom x5 和 x7 处理器的赌注,这将使用全新的架构以及该公司最先进的 14nm 制造节点。 然而,这些产品的目标是平板电脑而不是智能手机,至少目前是这样。
一个我没有答案的大问题是,英特尔可以赢得多少设计胜利。 分析师在这个问题上存在分歧,此时出货量预测看起来像是猜测。
去年,英特尔证明了它愿意承受亏损并烧掉数十亿美元来在平板电脑市场站稳脚跟。 现在说它是否会在新的 Atom 芯片,尤其是智能手机 SoFIA 产品上使用相同的方法还为时过早。
到目前为止,我只见过一款基于英特尔 SoFIA 处理器的实际产品——一款售价 69 美元的中国平板电脑,具有 3G 连接性。 它本质上是一款超大手机,因此您可以想象,一款入门级 SoFIA 手机最终的成本可能会低得多。 对于白盒智能手机和平板电脑制造商来说,这一定是一个诱人的提议,因为他们可以轻松地设计出 50 至 100 美元的背面贴有“Intel Inside”标签的设备,从营销的角度来看,这听起来不错。
不幸的是,我们只能猜测未来一年左右将有多少英特尔手机和平板电脑出货。 我们显然在处理数百万、数千万的单位,但问题是:有多少个? 大多数分析师认为,英特尔今年将出货 20 到 5000 万台 Atom x3 处理器,考虑到今年智能手机的总出货量预计将达到 12 亿台,这只是杯水车薪。 然而,英特尔是无情的,有钱可烧,也不必从这些芯片中获利。 到 2015 年底,它可以占领 3% 到 4% 的市场份额,但市场份额在 2016 年及以后应该会继续增长。
这对 Android 开发人员意味着什么?
由于某些兼容性问题,英特尔在一些 Android 开发人员中名声不佳。 几年前这是一个真正的问题,因为硬件与大多数设备中使用的标准 ARM 内核有很大不同。
幸运的是,公司在这两年里取得了很大的进步; 它提供广泛的培训计划、全面的文档等。 事实上,快速浏览一下 LinkedIn 的职位列表就会发现,英特尔正在招聘数十名 Android 开发人员,并且每个月都会有几个新职位空缺。
所以一切都很顺利,对吧? 这得看情况…
上周我有机会测试了一款基于英特尔 Atom Z3560 的新华硕手机,我必须说我对结果很满意。 它是一个很好的硬件平台,能够在预算设备上处理 4GB 的 RAM。 华硕认为它今年可以销售 3000 万部,考虑到英特尔的智能手机市场份额,这确实令人印象深刻。
唯一的问题是一些 Android 应用程序在英特尔硬件上仍然表现不佳。 通常,它不会太大,但您确实会遇到一些奇怪的崩溃、不切实际的基准测试分数和其他兼容性问题。 坏消息是开发人员无法解决与硬件相关的问题,尽管获得一些基于英特尔的设备进行测试将是一个好的开始。 好消息:英特尔正在尽最大努力解决所有问题,因此您不必这样做。
至于 ARM 硬件,我们将在更多集群中看到更多 CPU 内核。 许多主流设备的单线程性能仍然有限,即基于四核和八核 Cortex-A53 SoC 的廉价手机。 现在说新的 Google/ARM 编译器是否能够提高此类设备的性能还为时过早。 他们可能会,但有多少? 异构计算是明年值得关注的另一个趋势。
总结一下,以下是 Android 开发人员在 2015 年末和 2016 年在软件和硬件方面的预期:
- 更多入门级和主流细分市场的英特尔 x86 处理器。
- 英特尔的市场份额在 2015 年将微不足道,但在 2016 年及以后可能会增长。
- 更多 ARMv8 多核设计即将上线。
- 新的“优化”ART 编译器。
- 异构计算即将到来,但还需要一段时间。
- 过渡到 FinFET 制造节点和 Cortex-A72 将释放更多性能和功能。