【教学课件】第十章代码优化.ppt
《【教学课件】第十章代码优化.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第十章代码优化.ppt(67页珍藏版)》请在三一办公上搜索。
1、第十章 代码优化,10,1,什么是代码优化,10,2,局部优化,10,3,控制流程分析和循环,10,4,数据流分析举例,宗旨:,获得较好性能的代码,阶段:,source front I.R code target,code end generator code,用户,中间代码优化,目标代码优化,10.1 什么是代码优化,例:,int arr10000;void Binky()int i;for(i=0;i 10000;i+)arri=1;,int arr10000;void Winky()register int*p;for(p=arr;p arr+10000;p+)*p=1;,10.2 优化
2、分类,按阶段分:与机器无关的优化-对中间代码进行依赖于机器的优化-对目标代码进行根据优化所涉及的程序范围分成:(1)局部优化:(基本块)(2)循环优化:对循环中的代码进行优化(3)全局优化:大范围的优化优化工作 数据流分析(control-flow analysis)控制流分析(data-flow analysis)变换(transformations),10.2.1 优化技术简介(a)常数合并,a=10*5+6-b;_tmp0=10;_tmp1=5;_tmp2=_tmp0*_tmp1;_tmp3=6;_tmp4=_tmp2+_tmp3;_tmp5=_tmp4 b;a=_tmp5;,_tmp0
3、=56;_tmp1=_tmp0 b;a=_tmp1;,优化技术简介(b)常数传播,_tmp4=0;f0=_tmp4;_tmp5=1;f1=_tmp5;_tmp6=2;i=_tmp6;,f0=0;f1=1;i=2;,优化技术简介(c)代数简化,x+0=x0+x=xx*1=x1*x=x0/x=0 x-0=x,b&true=bb&false=falseb|true=trueb|false=b,优化技术简介代数简化,_tmp0=5;_tmp1=_tmp0+a;_tmp2=_tmp1+10;b=_tmp2;_tmp0=15;_tmp1=a+_tmp0;b=_tmp1;,例:b=5+a+10;,优化技术简
4、介(d)降低运算强度,a)i*2=2*i=i+i=i2b)i/2=(int)(i*0.5)c)0-1=-1d)f*2=2.0*f=f+fe)f/2.0=f*0.5,优化技术简介(e)复写传播,tmp2=tmp1;tmp3=tmp2*tmp1;tmp4=tmp3;tmp5=tmp3*tmp2;c=tmp5+tmp4;,tmp3=tmp1*tmp1;tmp5=tmp3*tmp1;c=tmp5+tmp3;,例:main()int x,y,z;x=(1+20)*-x;y=x*x+(x/y);y=z=(x/y)/(x*x);,tmp1=1+20;tmp2=-x;x=tmp1*tmp2;tmp3=x*x;
5、tmp4=x/y;y=tmp3+tmp4;tmp5=x/y;tmp6=x*x;z=tmp5/tmp6;y=z;,优化技术综合应用,1.删除多余运算2.循环不变代码外提3.强度削弱4.变换循环控制条件5.合并已知量与复写传播6.删除无用赋值,优化技术简介,例:P:=0 for I:=1 to 20 do P:=P+AI*BI,(1)P:=0(2)I:=1(3)T1:=4*I(4)T2:=addr(A)-4(5)T3:=T2T1(6)T4:=4*I(7)T5:=addr(B)-4(8)T6:=T5T4(9)T7:=T3*T6(10)P:=P+T7(11)I:=I+1(12)if I=20 goto
6、(3),(1)P:=0(2)I:=1(3)T1:=4*I(5)T3:=T2T1(8)T6:=T5T4(9)T7:=T3*T6(10)P:=P+T7(11)I:=I+1(12)if I=20 goto(3),(6)T4:=T1,P:=0for I:=1 to 20 do P:=P+AI*BI,(4)T2:=addr(A)-4(7)T5:=addr(B)-4,(1)P:=0(2)I:=1(4)T2:=addr(A)-4(7)T5:=addr(B)-4(3)T1:=4*I(5)T3:=T2T1(6)T4:=T1(8)T6:=T5T4(9)T7:=T3*T6(10)P:=P+T7(11)I:=I+1(
7、12)if I=20 goto(3),(1)P:=0(2)I:=1(4)T2:=addr(A)-4(7)T5:=addr(B)-4(5)T3:=T2T1(6)T4:=T1(8)T6:=T5T4(9)T7:=T3*T6(10)P:=P+T7(11)I:=I+1(12)if I=20 goto(5),(3)T1:=4*I,(3)T1:=T1+4,(1)P:=0(2)I:=1(4)T2:=addr(A)-4(7)T5:=addr(B)-4(3)T1:=4*I(5)T3:=T2T1(6)T4:=T1(8)T6:=T5T4(9)T7:=T3*T6(10)P:=P+T7(11)I:=I+1(3)T1:=T
8、1+4(12)if I=20 goto(5),(1)P:=0(2)I:=1(4)T2:=addr(A)-4(7)T5:=addr(B)-4(5)T3:=T2T1(6)T4:=T1(8)T6:=T5T1(9)T7:=T3*T6(10)P:=P+T7(11)I:=I+1(3)T1:=T1+4(12)if=80 goto(5),(3)T1:=4,T1,(1)P:=0(2)I:=1(4)T2:=addr(A)-4(7)T5:=addr(B)-4(3)T1:=4(5)T3:=T2T1(6)T4:=T1(8)T6:=T5T1(9)T7:=T3*T6(10)P:=P+T7(11)I:=I+1(3)T1:=T
9、1+4(12)if T1=80 goto(5),(1)P:=0(4)T2:=addr(A)-4(7)T5:=addr(B)-4(3)T1:=4(5)T3:=T2T1(8)T6:=T5T1(9)T7:=T3*T6(10)P:=P+T7(3)T1:=T1+4(12)if T1=80 goto(5),基本块:是指程序中一顺序执行的语句序列,其中只有一个入口语句和一个出口语句。入口语句:1.程序的第一个语句;或者,2.条件转移语句或无条件转移语句的转移目标语句;或者3.紧跟在条件转移语句后面的语句。,10.2 局部优化:基本块内的优化,基本块内的语句要么全执行,要么全不执行,而不能只执行一部分。,划分
10、基本块的算法:1求出四元式程序之中各个基本块的入口语句。2对每一入口语句,构造其所属的基本块。它是由该语句到下一入口语句(不包括下一入口语句),或到一转移语句(包括该转移语句),或到一停语句(包括该停语句)之间的语句序列组成的。3.凡未被纳入某一基本块的语句,都是程序中控制流程无法到达的语句,因而也是不会被执行到的语句,我们可以把它们删除。,例:划分基本块(1)read(C)(2)A:=0(3)B:=1(4)L1:A:=A+B(5)if B=C goto L2(6)B:=B+1(7)goto L1(8)L2:write(A)(9)halt,划分成四个基本块B1,B2,B3,B4,(1)(2)(
11、3),(4)(5),(6)(7),(8)(9),基本块内实行的优化:合 并 已 知 量删除多余运算删除无用赋值,B1B2B3B4,(1)read(C)(2)A:=0(3)B:=1(4)L1:A:=A+B(5)if B=C goto L2(6)B:=B+1(7)goto L1(8)L2:write(A)(9)halt,基本块的DAG表示及其应用,有向无环图(DAG-Directed Acyclic Graph)基本块的DAG是在结点上带有标记的DAG 叶结点:独特的标识符(名字,常数)标记 内部结点:运算符号标记 各个结点:附加标识符标记,用,DAG,进行基本块的优化,四元式,DAG,结点,0,
12、型:,A:=B(:=,B,A),n1,A,B,1,型,:A:=op B(op,B,A),A,op,B,2,型,:A:=B op C(op,B,C,A),A,op,n1,n2,B,C,n1,n2,n1,n3,n1,n2,仅含0,1,2型四元式的基本块的DAG构造算法:首先,DAG为空。对基本块的每一四元式,依次执行:1如果NODE(B)无定义,则构造一标记为B的叶结点并定义NODE(B)为这个结点;如果当前四元式是0型,则记NODE(B)的值为n,转4。如果当前四元式是1型,则转2(1)。如果当前四元式是2型,则:(I)如果NODE(1)无定义,则构造一标记为C的叶结点并定义NODE(1)为这个
13、结点;(II)转2(2),2(1)如果NODE(B)是标记为常数的叶结点,则转2(3),否则转3(1)。(2)如果NODE(B)和NODE(C)都是标记为常数的叶结点,则转2(4),否则转3(2)。(3)执行op B(即合并已知量),令得到的新常数为P。如果NODE(B)是处理当前四元式时新构造出来的结点,则删除它。如果NODE(P)无定义,则构造一用P做标记的叶结点n。置NODE(P)=n,转4。(4)执行B op C(即合并已知量),令得到的新常数为P。如果NODE(B)或NODE(C)是处理当前四元式时新构造出来的结点,则删除它。如果NODE(P)无定义,则构造一用P做标记的叶结点n。置
14、NODE(P)=n,转4。,3(1)检查DAG中是否已有一结点,其唯一后继为NODE(B),且标记为op(即找公共子表达式)。如果没有,则构造该结点n,否则就把已有的结点作为它的结点并设该结点为n,转4。(2)检查中DAG中是否已有一结点,其左后继为NODE(B),其右后继为NODE(C),且标记为op(即找公共子表达式)。如果没有,则构造该结点n,否则就把已有的结点作为它的结点并设该结点为n,转4。,4.如果NODE(A)无定义,则把A附加在结点n上并令NODE(A)=n;否则先把A从NODE(A)结点上附加标识符集中删除(注意,如果NODE(A)是叶结点,则其标记A不删除),把A附加到新结
15、点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,例:(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,To 3.14(a),n1,例:(1)T0:=3.14(2)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 教学课件 教学 课件 第十 代码 优化
链接地址:https://www.31ppt.com/p-5664556.html