LLVM学习笔记

#LLVM简介
LLVM是一款对应用程序开发者透明的、终身程序分析的、可转换任意程序的编译器框架。它通过以下两点来达到上述要求:

  1. 一个拥有一些新奇特性的“代码表示”来作为分析、翻译、代码分发的基础。
  2. 一个利用上述“代码表示”提供的一组在以前编译方案中不从出现过的功能的来实现的编译器。
    LLVM是一款很好适应现代编程语言和体系结构的编译器基础框架。LLVM所要到达的目标有如下重要三点:
  3. 使用一个主动的(aggressive)、多阶段的优化策略,来使得程序性能最优。
  4. 成为一个前沿研究开发的基点,为当前和将来研究提供一个坚实的基础。
  5. 和系统编译器保持一致,使得操作对终端用户(程序开发者)透明。

与之前传统编译器区别

编译器开发者从各个方面出发,提出各种各样的方法来对程序进行优化,最终达到使程序性能最优的目的。一般来说,编译器开发者将利用如下3种技术中的一种或多种来开发编译器。然而,这些技术并不适合所有的编译器,并使之达到性能最优、编译时间最短的效果。

  1. 连接时的过程间优化
  2. 运行时的动态优化
  3. 概要信息导向(profile-driven)优化
    对于以上3种技术,传统的编译器也采取了不同的策略,为了更好的理解LLVM,我们不妨简单的对传统编译器在使用这3种技术做一个了解。

连接时的过程间优化

连接时的过程间优化是编译优化的关键一环,因为连接过程中将所有分别编译好的文件整合到一起,此时的优化是对程序的全局优化,也是优化效率最高的优化阶段。换句话说,连接时的过程间优化往往决定了一个编译器的优化效果的关键。而往往决定连接时优化的关键在于编译器是在哪一层做优化。是非常低层次的机器码层还是非常高层次的抽象语法树层?
有一大部分研究者选择在连接时或者运行时在机器码上做过程间的优化。这样的一个好处在于它们在不被改变的前端编译器上工作的很好,可以是开发者使用任何他们想使用的编译器。但是这种编译器系统有很多的限制:机器代码不能够提供足够的高层信息来支持主动的过程中间分析和转换。
为了解决这个问题,一些开发者提出新的技术来保存源代码级的信息直到连接时。通常,是通过将高层编译器的中间表示在编译时写到硬盘上来实现的。在连接时,连接器通过读取一系列版本的抽象语法树,对其进行组合、优化,最终生成可执行代码。但是这种技术的代价是高昂的,因为几乎所有的编译工作都被延迟到连接时,这就导致任何的程序改变都将导致所有的程序都必须重新编译。
总上所述,传统编译器的连接时时优化,要么存在无法提供高层信息,要么代价高昂的问题,这些时现代编译器不能承受的。

运行时的动态优化

对于运行时的动态优化,一个最为通用,也是最简单的方法就是***直接完全忽略动态优化***。然而,这毕竟是一种***懒政***,随着用户对程序性能的要求提升,这已不再是一个可以直接忽略的问题了。目前,运行时优化已经成为现代系统中一个频繁被使用的提高程序性能的技术。
提及运行时的动态优化,不能不提虚拟机。这里的虚拟机指的是高级语言运行时虚拟机(如:JVM等)。通过使用虚拟机和高层次的程序表示输入,这些系统能够提高可移植的、安全的服务来提高程序的性能,并且,它可以提供更多的、有用的高层信息给运行时优化器使用。不幸的是,高层次的连接时优化一样,这种系统使得编译时不能够做实质性的优化工作。例如,JIT编译器,这种动态编译器必须占用非常多的处理器周期来进行优化操作。
另一方面,机器代码级的运行时优化器以及指令翻译器通过直接操作本地机器代码来提高程序性能或者动态的翻译机器代码。很明显,这种方式有着和机器代码级过程间优化类似的弊端,在需要高精度的概要信息(profiling information)的轨迹生成和优化方面共工作的很好,但是对于高层次的重构转换应对不足。

概要信息导向(Profile-driven)优化

概要信息导向优化是一种利用收集来的程序运行时行为信息来提高程序性能的一种技术。传统的概要信息导向优化需要经历五个阶段:

  1. 编译程序,在此阶段,需
  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值