Mono 2.2 有了新的线性代码生成引擎

  • Abel Avram
  • 郭晓刚

2009 年 1 月 27 日

话题:.NET语言 & 开发架构

直到现在 Mono 的代码生成引擎都是基于树状的代码中间表现形式(Intermediate Representation,IR)。Mono 2.2 版有了一个基于线性 IR 的新引擎,大大改善了速度和代码大小。

Miguel de Icaza 说,原先树状的 IR 导致“很难有效改进代码生成及扩展 JIT 引擎”。新的线性 IR 有助于“寄存器分配程序更好地了解寄存器的使用状况,从而在生成代码的时候更好地决策”。

线性 IR 的开发工作始于 2005 年末。工作一直在进展,但 Mono 团队不想把新引擎放进 Mono 2.0 版,因为牵涉到的工作实在是太多了。现在随着2.2 版发布,Mono 终于用上了新引擎。

新引擎的巨大成效从基准测试结果可见一斑:

速度:计算密集的代码会从新引擎得益较多,一般有 10% 到 30% 的性能提升,某些情况下最高可提速 50%。

代码大小:新引擎产生的代码更紧凑,一般可缩小 12% 到 20%。

想了解新引擎技术细节的读者请参阅 Mono 的网站。 2.2 版发布说明上提到以下主要改进:性能提升、支持完全的提前编译、支持通过 PerformanceCounters 监控、支持运行时动态挂载代码(attaching code live)、支持 SIMD,不一而足。

查看英文原文:Mono 2.2 Has a Linear Code Generation Engine

.NET语言 & 开发架构