通过惰性基本块版本化实现简单有效的类型检查移除
编程语言
2015-06-01 v2
摘要
动态类型编程语言(如 JavaScript 和 Python)将类型检查推迟到运行时。为最大化性能,动态语言虚拟机实现必须尝试消除冗余的动态类型检查。然而,类型推断分析通常代价高昂,且涉及编译时间与结果精度之间的权衡。这导致了日益复杂的多层虚拟机架构的产生。本文引入惰性基本块版本化(lazy basic block versioning),这是一种简单的即时编译技术,可有效移除关键代码路径中的冗余类型检查。这一新颖方法在传播上下文相关类型信息的同时,惰性地即时生成类型特化的基本块版本。它无需使用代价高昂的程序分析,不受传统类型分析精度限制的约束,并避免了推测优化技术的实现复杂性。我们已在 JavaScript JIT 编译器中实现了过程内的惰性基本块版本化,并与经典的基于流的类型分析进行了比较。惰性基本块版本化在所有基准测试上的表现均相当或更优。平均而言,71% 的类型测试被消除,带来了高达 50% 的加速。我们还表明,在多个基准测试上,我们的实现生成的机器代码比 TraceMonkey(一个用于 JavaScript 的追踪 JIT 编译器)更高效。实现简单、算法复杂度低以及良好的运行时性能,使得基本块版本化对基线 JIT 编译器极具吸引力。
引用
@article{arxiv.1411.0352,
title = {Simple and Effective Type Check Removal through Lazy Basic Block Versioning},
author = {Maxime Chevalier-Boisvert and Marc Feeley},
journal= {arXiv preprint arXiv:1411.0352},
year = {2015}
}