65.9K
CodeProject 正在变化。 阅读更多。
Home

理解 Android Runtime Compiler 中的 Intel® 优化

2016 年 2 月 1 日

CPOL

3分钟阅读

viewsIcon

7075

理解 Android Runtime Compiler 中的 Intel® 优化

Intel® 开发者专区提供跨平台应用开发工具和使用指南,平台和技术信息,代码示例以及同行专家的建议,以帮助开发者创新和获得成功。加入我们的 Android物联网Intel® RealSense™ 技术Windows 社区,下载工具,访问开发套件,与志同道合的开发者分享想法,并参与黑客马拉松、竞赛、巡展和本地活动。

引言

应用程序开发人员通常使用 Java* 语言编写应用程序的一部分。然后,此 Java 代码将转换为 Android 特定的字节码,称为 Dex 字节码。在 Android 主要版本的各种版本中,有几种方法可以将字节码格式转换为在处理器上运行的实际二进制格式。例如,在 Jelly Bean* 版本中,运行时中有一个即时 (JIT) 编译器,称为 Dalvik* VM。从 KitKat* 开始,新的 Android 运行时 (ART) 的出现,在 ART 中添加了提前 (AOT) 编译器的存在。

Intel 在 ART 编译器中实现了两项优化。这两种优化都提供了一种简化编译时评估循环的方法。这些元素只是 Intel 致力于为 Android 操作系统提供最佳用户体验的一部分,并且在此处展示了这些优化如何极大地优化综合基准。

优化

自 2008 年以来,Google 的 Android 编译器有三种变体。Dalvik Jit 编译器自 Froyo 起可用,在 Android 的 Lollipop 版本中被 Quick AOT 编译器取代。这种演变代表了将 Dex 字节码(它是 Android 版本的 Java 字节码)转换为二进制代码的范例的重大变化。由于这种变化,Dalvik VM 的大部分中间层优化逻辑都被复制到了 Quick 中,并且,虽然 AOT 编译可能为编译器提供更多时间进行复杂的优化,但 Quick 提供了与 Dalvik VM 类似的基础设施和优化。在 2014 年末,AOSP 添加了一个名为 Optimizing 的新编译器。这个最新版本的编译器是对 Quick 编译器的完全重写,并且随着时间的推移,似乎正在添加越来越多的基础设施以实现更高级的优化,这在以前的编译器版本中是不可能的。

与此同时,Intel 一直致力于将其自己的基础设施和优化融入到编译器中,从而为基于 Intel 处理器的设备提供最佳的用户体验。在介绍 Intel 在 Android 编译器中实现的优化之前,下一节将展示两个在生产编译器中很常见的优化,并有助于更好地理解这两个 Intel 优化。

常量折叠和存储下沉优化

常量计算下沉是一项重要的优化。单独考虑时,尚不清楚它是否可以应用于实际案例,但是游戏示例显示了如何识别候选循环。集成优化提供了一种优化循环的方法,例如,这些循环会通过内联方法进行转换。

对于常量计算下沉优化,综合基准 CF-Bench 在其一些子测试中受益于得分。在编译器领域,获得如此数量级的加速是罕见的。它表明,对 MIPS 子测试得分的转换掩盖了适用于其他子测试的任何未来优化。

简易循环求值器

当每个循环输入都可供编译器使用时,简易循环求值器是一项强大的优化。为了使此优化能够实际应用,还必须进行其他优化,例如内联。这对于本文讨论的两种优化至关重要:开发人员通常不会编写本身适用的循环。

要了解有关这些优化的更多信息,请阅读文章:了解 Android* 运行时编译器中的 Intel 优化

© . All rights reserved.