手把手带你写一门编程语言
宫文学
北京原点代码 CEO
7534 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 49 讲
起步篇:让一门超简单的语言跑起来 (21讲)
结束语 (1讲)
手把手带你写一门编程语言
15
15
1.0x
00:00/00:00
登录|注册

40|中端优化第3关:一起来挑战过程间优化

你好,我是宫文学。
在前面两节课,我们分析了本地优化和全局优化的场景。我们发现,由于基于图 IR 的优点,也就是控制流和数据流之间耦合度比较低的这个特点,我们很多优化算法的实现都变得更简单了。
那么,对于过程间优化的场景,我们这个基于图 IR 是否也会带来类似的便利呢?
过程间优化(Inter-procedural Optimization)指的是跨越多个函数(或者叫做过程),对程序进行多方面的分析,包括过程间的控制流分析和数据流分析,从而找出可以优化的机会。
今天这节课,我们就来分析两种常用的过程间优化技术,也就是内联优化和全局的逃逸分析,让你能了解过程间优化的思路,也能明白如何基于我们的 IR 来实现这些优化。之后,我还会给你补充另一个优化技术方面的知识点,也就是规范化。

内联优化

内联优化是最常见到的一个过程间优化场景,说的就是当一个函数调用一个子函数时,干脆把子函数的代码拷贝到调用者中,从而减少由于函数调用导致的开销。
特别是,如果调用者是在一个循环中调用子函数,那么由很多次循环累积而导致的性能开销是很大的。内联优化的优势在这时就会得到体现。
而在面向对象编程中,我们通常会写很多很简短的 setter 和 getter 方法,并且在程序里频繁调用。如果编译器能自动把这些短方法做内联优化,我们就可以放心大胆地写这些短方法,而不用担心由此导致的性能开销了。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了中端优化的第三关——挑战过程间优化。首先介绍了基于图IR的优点,以及过程间优化的概念和意义。随后详细讨论了两种常用的过程间优化技术:内联优化和全局逃逸分析。内联优化通过将子函数的代码拷贝到调用者中,减少函数调用导致的性能开销,并且在面向对象编程中也能发挥作用。文章还提到了基于IR实现内联优化的具体方法,以及内联优化可能带来的其他优化机会,如常量传播和折叠。此外,全局逃逸分析也被提及,但未详细展开。整体而言,本文通过具体示例和技术讨论,深入浅出地介绍了过程间优化的重要性和实现方法。文章还介绍了逃逸分析的作用以及基于当前的IR来实现逃逸分析的方法。最后,还介绍了规范化这一优化方法,对各种计算节点进行化简操作,从而提高编译器的性能。整体而言,本文对编译器优化的技术细节进行了深入剖析,为读者提供了全面的技术视角。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手把手带你写一门编程语言》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(3)

  • 最新
  • 精选
  • ifelse
    学习打卡
    2022-10-03归属地:浙江
  • 千无
    一路走马观花地学到这,很有感触,世界大大的打开了
    2021-11-17
  • 奋斗的蜗牛
    每次看都有醍醐灌顶的感觉
    2021-11-15
收起评论
显示
设置
留言
3
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部