第十一章 代码优化.docx
- 文档编号:30228597
- 上传时间:2023-08-07
- 格式:DOCX
- 页数:16
- 大小:281.03KB
第十一章 代码优化.docx
《第十一章 代码优化.docx》由会员分享,可在线阅读,更多相关《第十一章 代码优化.docx(16页珍藏版)》请在冰豆网上搜索。
第十一章代码优化
第十一章代码优化
1、教学目的及要求:
本章介绍优化的相关知识,要求掌握局部优化,基本块的DAG表示及其应用,控制流分析和循环查找算法,到达定值与引用定值链,循环优化。
◇理解所谓代码优化是指什么?
◇知道最常用的代码优化技术有哪些?
◇知道实现代码优化要进行哪些工作?
2、教学内容:
优化概述,局部优化,基本块的DAG表示及其应用,控制流分析和循环查找算法,到达定值与引用定值链,循环优化。
3、教学重点:
局部优化;DAG的构造与应用。
4、教学难点:
从概念上理解什么是代码优化,编译过程中可进行哪些优化,以及进行优化所需要的基础都没有难点,但在实现上是有相当复杂的工作。
5、课前思考
◇回顾第一章介绍编译过程时提到的代码优化,代码优化阶段的任务是什么?
◇第一章介绍的PL/0编译程序有没有进行代码优化?
◇你有没有使用过和比较过同一个编译系统选择其进行优化和不进行优化的编译速度?
6、章节内容
第一节优化技术简介
第二节局部优化
11.1优化技术简介
一、优化
优化是指对程序或中间代码进行各种等价变换,使得从变换后的程序出发,能生成更有效的目标代码。
等价指不改变程序的运行结果;有效指目标代码运行时间较短,以及占用的存储空间较小。
优化的目的在于:
既要设法缩小存储空间,又要尽量提高运行速度,而且常常偏重于提高运行速度。
从优化的阶段而言,优化可分为两类:
1、中间代码优化:
对语法分析的中间代码进行等价变换,不依赖具体的计算机。
2、目标代码优化:
在很大程度上依赖具体的计算机。
如寄存器优化、并行分支的优化、窥孔优化等。
从优化涉及的范围不同,可分为:
1、局部优化:
指在只有一个入口,一个出口的基本块上进行的优化。
2、循环优化:
对循环中的代码进行优化。
3、全局优化:
在整个程序范围内进行的优化,是必须在考察基本块之间的相互联系与影响的基础上才能完成的优化。
二、优化技术简介
1、删除多余运算(删除公共子表达式)
2、代码外提
3、强度削弱
4、变换循环的控制条件
5、合并已知量与复写传播
6、删除无用赋值
例:
源程序为(PASCAL程序)
P:
=0
FORI:
=1TO20DO
P:
=P+A[I]*B[I];
经编译后的四元式代码如下图所示。
此程序段由B1和B2两部分组成,B2是一个循环。
假定机器按字节编址。
可进行以下优化:
删除公共子表达式:
优化的目的在于使目标代码执行速度较快。
代码外提:
对于循环中的某些代码,如果它产生的结果在循环中是不变的,可将其提到循环外,以减少循环中的计算量。
强度削弱:
强度削弱是指把程序中执行时间较长的运算替换为执行时间较短的运算。
如把乘法运算替换为加法运算。
如上述代码段中(3),T1的值与I保持线性关系,每次总是增加4。
变换循环控制条件:
上述代码中,T1和I始终保持T1=4*I的线性关系,因此循环控制条件I≤20可改为T1≤80(变换后I值在循环中不被引用,(11)式可删除)。
合并已知量:
若运算对象都是编译时的已知量,可以在编译时计算出它的值,而不必等到程序运行时再计算。
如上述代码中的(3),可变换为T1:
=4。
复写传播:
如(6)把T1的值复写到T4中,(8)式要引用T4的值,其间未改变T1和T4的值,因此(8)式可改写为T6:
=T5[T1]。
该复写传播的目的在于使(6)中对T4的赋值成为无用,(6)可删除。
删除无用赋值:
只要程序中其它地方不需要引用的赋值,称为无用赋值,可从程序中删除。
经比较,原四元式序列循环部分包含10个四元式,而现在只包含6个四元式,原来四元式序列要进行三次乘法运算,而现在只进行一次乘法运算。
显然,现在的四元式序列生成的目标代码,其执行效率更高。
11.2局部优化
一、局部优化
局部优化指基本块内的优化。
基本块:
指程序中一顺序执行的语句序列,其中只有一个入口语句和一个出口语句(语句为四元式),执行时只能从其入口语句进入,从其出口语句退出。
对给定的程序,可将其划分为一系列的基本块,在各基本块的范围内分别进行优化。
二、基本块的划分
1、入口语句的定义是:
①程序的第一个语句;或者,
②条件转移语句或无条件转移语句的转移目标语句;或者,
③紧跟在条件转移语句后面的语句。
2、划分基本块的算法
1求出四元式程序中各基本块的入口语句;
2对每一入口语句,构造其所属的基本块。
它是由该入口语句到下一入口语句(不包括下一入口语句),或到下一转移语句(含该转移语句),或到一停止语句(含该停止语句)之间的语句序列组成。
3凡未被纳入某一基本块的语句,都是程序中控制流程无法到达的语句,可删除。
例:
(1)readX
(2)readY
(3)R:
=XModY
(4)IFR=0GOTO(8)
(5)X:
=Y
(6)Y:
=R
(7)GOTO(3)
(8)writeY
(9)halt
三、在基本块内,可实现三种优化
1、合并已知量
2、删除多余运算
3、删除无用赋值:
较难实现,因为孤立地考虑一个基本块,通常不能确立一赋值是否真是无用的。
通常无用赋值有如下情形:
①对A赋值后,A值在该程序中不被引用(要全局分析);
②对A赋值后,A被引用前又对A重新赋值;
③对A递归赋值,如A:
=A+C,且A在程序中仅在此递归运算中被引用(要全局分析)。
四、基本块的DAG表示
1、DAG图的定义
DAG图:
无环路有向图,图中结点有如下标记或附加信息:
①图的叶结点:
即无后继的结点,以一标识符(变量名)或常数作为标记,表示该结点代表该变量或常数的值。
②图的内部结点:
即有后继的结点,以一运算符作为标记,表示该结点代表应用该运算符对应其后续结点所代表的值进行运算的结果。
③图中各个结点上可能附加一个或多个标识符,表示这些变量具有该结点所代表的值。
2、基本块的DAG表示
一个基本块可用一个DAG表示,常见四元式DAG图表示如下,其中ni为结点编号,结点下面的符号(运算符、标识符或常数)为各结点的标记,各结点右边的标识符是结点的附加标识符,具有该结点所代表的值。
3、基本块的DAG算法
假设DAG各结点信息将用某种适当的数据结构来存放(例如链表),并设有一个标识符(包括常数)与结点的对应表。
NODE(A)是描述这种对应关系的一个函数,它的值或者是一个结点的编号n,或者无定义。
前一情况代表DAG中存在一个结点n,A是其上的标记或附加标识符。
初始状态,DAG为空。
对基本块的每一个四元式,依次执行以下步骤:
⑴如果NODE(B)无定义,则构造一标记为B的叶结点并定义NODE(B)为该结点;
如果当前四元式是0型,则记NODE(B)的值为n,转⑷;
如果当前四元式是1型,则转⑵①;
如果当前四元式是2型,则(a)若NODE(C)无定义,则构造一标记为C的叶结点,并定义为NODE(C)为这个结点;(b)转⑵②。
⑵合并已知量
①若NODE(B)是标记为常数的叶结点,则转⑵③,否则转⑶①;
②若NODE(B)和NODE(C)都是标记为常数的叶结点,转⑵④,否则转⑶②;
③执行OPB(合并已知量),令得到的新常数为P,若NODE(B)是处理当前四元式时新构造出来的结点,则删除它,若NODE(P)无定义,则构造一用P做标记的叶结点N,置NODE(P)=N,转⑷;
④执行BOPC(合并已知量),令得到的新常数为P,若NODE(B)或NODE(C)是处理当前四元式时新构造出来的结点,则删除它,若NODE(P)无定义,则构造一用P做标记的叶结点N,置NODE(P)=N,转⑷。
⑶检查公共子表达式
①检查DAG中是否已有一结点,其唯一后继为NODE(B)且标记为OP(即找公共子表达式),若没有,则构造该结点N,否则将已有的结点作为其结点,并设该结点为N,转⑷;
②检查DAG中是否已有一结点,其左后继为NODE(B),右后继为NODE(C),且标记为OP(即找公共子表达式),若没有,则构造该结点N,否则将已有的结点作为其结点,并设该结点为N,转⑷。
⑷删除无用赋值
若NODE(A)无定义,则将A附加在结点N上,并令NODE(A)=N;否则,先把A从NODE(A)结点上的附加标识符集中删除(若NODE(A)是叶结点,则其标记A不删除),把A附加到新结点N上,并令NODE(A)=N,转处理下一四元式。
例:
试构造以下基本块的DAG
(1)T0:
=3.14
(2)T1:
=2*T0
(3)T2:
=R+r
(4)A:
=T1*T2
(5)B:
=A
(6)T3:
=2*T0
(7)T4:
=R+r
(8)T5:
=T3*T4
(9)T6:
=R-r
(10)B:
=T5*T6
根据DAG图重写四元式,结果如下:
(1)T0:
=3.14
(2)T1:
=6.28
(3)T3:
=T1(4)T2:
=R+r
(5)T4:
=T2(6)A:
=6.28*T2
(7)T5:
=A(8)T6:
=R-r
(9)B:
=A*T6
除了可用DAG图进行上述的优化外,我们还可从基本块的DAG图中得到一些其它优化信息:
1、在基本块外被定值并在基本块内被引用的所有标识符,就是作为叶子结点上标记的那些标识符;
2、在基本块内被定值且该值能在基本块后被引用的所有标识符,就是DAG各结点上的那些附加标识符。
利用上述信息,可进一步删除其它无用赋值,但这时必须涉及到有关变量在基本块后面被引用的情况。
上例中,若T0,T1…,T6在基本块后未被引用,则可进一步优化,生成四元式为:
(1)S1:
=R+r
(2)A:
=6.28*S1
(3)S2:
=R-r(4)B:
=A*S2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第十一章 代码优化 第十一 代码 优化