NoMap: Speeding-Up JavaScript Using Hardware Transactional Memory

  1. 概念
    1. JIT compilers  即时编译器,JIT讲解  编译器与解释器的区别和工作原理
    2. Stack Map Points (SMPs).这些潜在的跨层传输点称为堆栈映射点(SMPs)。是指遇到极端情况时,执行从高层转换到低层的转换。这要求转换的时候,高层和低层拥有着相同的状态。这限制了一些优化的发生。

  2. 观点
    1. 脚本语言滞后的一个主要原因是它们的动态特性。由于程序员不声明类型,编译器必须在运行时发现对象的类型和结构。这就是为什么高级脚本语言编译器是jit
    2. 先进的即时编译器的特性:
      1. 执行广泛的分析以检测常见的情况或程序的“热路径”(频繁执行)行为,以至于它们可以执行代码优化,从而提高常见情况下的性能。
      2. 它们被组织称多个层。每一层在生成代码的时间和生成代码的质量之间提供了不同的权衡。
      3. 由更高级的层生成的代码包含对极端情况的检查。这是因为这些层生成的专用代码只能处理常见情况。当代码检测到一个极端情况或“冷路径”时,它会跳转到优化程度较低的层。
  3. 论文发现的问题
    1. 由其最先进的层(FTL)生成的代码具有很高的smp频率。
    2. smp的优化限制效果和smp保护检查的开销导致脚本语言的性能低下。
  4. 文章的贡献
    1. 第一:发现了频繁的层间跳转点需要跨层的一致状态,从而限制了优化。
    2. 我们建议修改以减轻smp的影响,并扩展JavaScript JIT编译器来支持我们的修改
    3. 我们评估了使用轻量级和重量级TM硬件对NoMap的改进
  5. 方法
    1. 用终止指令取代SMPs
      1. 这样的话就不需要受需要保持跨层之间相同的状态限制优化的影响
    2. 合并数组边界检查
      1. 如果循环中的数组是单调访问的,只需要判断最后访问的下标是否溢出,如果溢出,就回滚,然后跨到低层重新执行
    3. 去掉溢出检查
      1. 设置一个SOF的标志,用于判断过程中是否出现了溢出。
  6. 评估
    1. 指令数的减少
    2. 执行时间的减少
原文地址:https://www.cnblogs.com/cyj1258/p/12343334.html