编译原理之美
宫文学
北京原点代码 CEO
46197 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 45 讲
开篇词 (1讲)
编译原理 · 期中考试周 (1讲)
编译原理之美
15
15
1.0x
00:00/00:00
登录|注册

28 | 数据流分析:你写的程序,它更懂

方向D
初始值I
转换函数F
计算多个V值相交的值
V值的取值
常数传播分析
最小上界
最大下界
半格
偏序集
数据流分析的基本特征
多路径下的V值计算
基本块的活跃变量集合计算
多条执行路径的活跃性分析
半格理论
多路径下的V值计算问题
基于CFG的优化分析方法框架
一课一思
容易撞墙的知识点
半格理论的重要性
数据流分析框架
全局分析与本地分析的区别
常数传播
半格理论
活跃性分析
活跃变量集合计算
多条执行路径
控制流图
部分冗余删除
代码移动
拷贝传播
删除公共子表达式
课程小结
数据流分析
CFG
全局优化
数据流分析

该思维导图由 AI 生成,仅供参考

上一讲,我提到了删除公共子表达式、拷贝传播等本地优化能做的工作,其实,这几个工作也可以在全局优化中进行。
只不过,全局优化中的算法,不会像在本地优化中一样,只针对一个基本块。而是更复杂一些,因为要覆盖多个基本块。这些基本块构成了一个 CFG,代码在运行时有多种可能的执行路径,这会造成多路径下,值的计算问题,比如活跃变量集合的计算。
当然了,还有些优化只能在全局优化中做,在本地优化中做不了,比如:
代码移动(code motion)能够将代码从一个基本块挪到另一个基本块,比如从循环内部挪到循环外部,来减少不必要的计算。
部分冗余删除(Partial Redundancy Elimination),它能把一个基本块都删掉。
总之,全局优化比本地优化能做的工作更多,分析算法也更复杂,因为 CFG 中可能存在多条执行路径。不过,我们可以在上一节课提到的本地优化的算法思路上,解决掉多路径情况下,V 值的计算问题。而这种基于 CFG 做优化分析的方法框架,就叫做数据流分析。
本节课,我会把全局优化的算法思路讲解清楚,借此引入数据流分析的完整框架。而且在解决多路径情况下,V 值的计算问题时,我还会带你学习一个数学工具:半格理论。这样,你会对基于数据流分析的代码优化思路建立清晰的认识,从而有能力根据需要编写自己的优化算法。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

数据流分析是一种用于全局优化的算法框架,能够解决多路径下的值计算问题。在全局优化中,算法需要覆盖多个基本块,构成控制流图(CFG),并考虑多种可能的执行路径。数据流分析的场景之一是活跃性分析,它在全局优化中变得更加复杂,因为代码可能经过多条路径执行。通过倒着向前计算活跃变量的集合,数据流分析可以发现可以被删除的变量,从而进行优化。当CFG中存在循环时,需要运用不动点法来计算每个基本块的活跃变量集合。数据流分析的分析框架包含了方向、值、转换函数、初始值和Λ运算,这使得它能够更好地处理全局优化中的复杂情况。此外,半格理论是数据流分析中的重要数学工具,用于比较偏序集中元素的大小,求最大下界和最小上界。 文章还介绍了半格理论的概念和应用,以及数据流分析在常数传播场景中的应用。常数传播是一种优化技术,通过替换变量的值为常数来提高程序性能。在常数传播中,V的取值可能是常数、Top(表示变量的值不是一个常数)和Bottom(表示某个语句不会被执行),并且需要根据特定规则进行计算。文章还提到了数据流分析框架的设计要点,以及对全局分析任务的思考和建议。 总的来说,本文通过介绍数据流分析和半格理论,以及在常数传播场景中的应用,帮助读者理解了全局优化中的复杂情况下如何进行值计算和优化,为读者提供了深入的技术知识和应用思路。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《编译原理之美》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(8)

  • 最新
  • 精选
  • 沉淀的梦想
    感觉常数传播这个lambda,本质上也是在求半格的最小上界,是不是我们只要定义好V的所有取值组成的半格,然后数据流分析框架就直接将其最小上界作为lambda,就能解决所有的数据流分析问题了?

    作者回复: 我会在答疑部分把数据流分析框架的理论模型再梳理一遍。 是求最小上界,还是最大下界,主要是看如何比较半序集中元素的大小。 国外有的人,把数据流框架定义得比较严格,比如Top跟所有的元素x的meet运算,结果都是x;Bottom跟所有元素x的meet运算,结果都是Bottom。按照这个定义,我们文稿中常量传播的Bottom和Top就要互换。 但也有的人,不觉得必须遵守这个说法,只要有一套规则能计算meet后的结果就行。所以能看到不同的文献,采用不同的叙述方式。

    2019-10-28
    3
  • honnkyou
    是因为meet时有计算并集的情况,也有计算交集的情况,所以引入的半格理论这样理解对吗? 这部分还是有一些没搞太清楚。

    作者回复: 在35讲针对半格问题,还有一些补充描述,你看看有没有帮助。

    2019-11-26
  • 余晓飞
    因为它前面的活变量集合{a}不包括 y,也就是不被后面的代码所使用 这里的集合{a}是不是应该为{x}?

    作者回复: 是滴是滴,文稿写错了,跟图没对起来。 多谢你细心的阅读!

    2019-11-21
  • dll
    看到 D、V、F、I 和Λ 计算 的时候真的顶不住了,好天书
    2022-07-26
    3
  • dll
    那个时候你是用什么算法来破解僵局的呢?是不动点法。在这里,我们还是要运用不动点法,具体操作是:给每个基本块的 V 值都分配初始值,也就是空集合。 这个地方配的说明图应该是错了,第三块应该是 b:=a+d; 但是写成了 b:=a+b;
    2022-07-26
    1
  • 煊少
    格理论的一个作用应该是为了证明算法一定能有不动点吧?
    2021-04-29
  • Geek_89bbab
    问题1: 对于活变量集合的计算,当两个分支相遇的情况下,最终的结果我们取了两个分支的并集。 ----------- 老师,这里面两条分支相遇,比如 之前图中的2,3相遇的位置,是1,还是4? ---------- 问题2:1. 如果有一条输入路径是 Top,或者说 C(a, si, out) 是 Top,那么结果 C(a, s, in) 就是 Top。 ----------- 这就话啥意思啊?哪一种形式表示输入,哪一种形式表示输出?
    2020-05-07
  • Milittle
    老师:有一个疑问就是,这个交半格和并半格 和我们传统的集合代数的交并运算是不是是相反的。这里面的交运算是求并集,而并运算是交集,这里有点困惑。
    2020-05-03
收起评论
显示
设置
留言
8
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部