《编译原理课程教案》第7章:代码优化.ppt
《《编译原理课程教案》第7章:代码优化.ppt》由会员分享,可在线阅读,更多相关《《编译原理课程教案》第7章:代码优化.ppt(56页珍藏版)》请在三一办公上搜索。
1、代码优化,第十章,本章要求,主要内容:代码优化的主要功能,局部优化、全局优化和循环优化的相关概念,各种优化技术重点掌握:代码优化技术,基本块、流图、DAG的概念,必经结点、回边、循环的概念,各种优化技术。,代码优化所地位和作用:,7.1 概述,实际上很多地方可以对代码的执行效率进行改进,主要讲对中间代码的优化,代码优化:对程序进行等价变换,使得从变换后的程序出发,能够生成更有效的目标代码。,优化分类,按阶段分:与机器无关的优化-对中间代码进行 依赖于机器的优化-对目标代码进行根据优化所涉及的程序范围分成:(1)局部优化:(基本块)(2)循环优化:对循环中的代码进行优化(3)全局优化:大范围的优
2、化,优化的原则等价原则:不改变运行结果有效原则:优化后时间更短,占用空间更少合算原则:应用较低的代价取得较好的优化效果 宗旨:获得较好性能的代码(时间,空间)等价意图、结果之间要权衡,中间代码优化技术,优化工作 数据流分析(control-flow analysis)控制流分析(data-flow analysis)变换(transformations),快速排序程序,void quicksort(int m,int n)int i,j,v,x;if(nv);if(i=j)break;x=ai;ai=aj;aj=x;x=ai;ai=an;an=x;quicksort(m,j);quicksor
3、t(i+1,n);,中间代码,7.2 基本块的优化,基本块:是指程序中一顺序执行的语句序列,其中只有一个入口语句和一个出口语句,入口是其第一个语句,出口是其最后一个语句 如果x:=y+z 则称对x定值,引用y和z 在一个基本块内的一个名字,在程序中的某个给定点是活跃的,是指如果在程序中它的值在该点之后被引用.,入口语句:1程序的第一个语句;或者,2条件转移语句或无条件转移语句的转移目标语句(此处的转移语句包括各种控制的转向,如call,return,end,stop等);或者3紧跟在条件转移语句后面的语句。,执行:对于一个基本块,执行时只能从其入口进入,从其出口退出,划分基本块的算法,求出四元
4、式程序之中各个基本块的入口语句对每一入口语句,构造其所属的基本块。它是由该语句到下一入口语句(不包括下一入口语句),或到一转移语句(包括该转移语句),或到一停语句(包括该停语句)之间的语句序列组成的。凡未被纳入某一基本块的语句,都是程序中控制流程无法到达的语句,因而也是不会被执行到的语句,可以把它们删除。一般把过程调用语句作为一个单独的基本块,例:*(1)read x(2)read y*(3)r:=x mod y(4)if r=0 goto(8)*(5)x:=y(6)y:=r(7)goto(3)*(8)write y(9)halt,流图:有向图。将控制流的信息增加到基本块的集合上来表示一个程序
5、。流图以基本块为单位。如果按顺序执行,就画一条有向边。基本块间的关系:(前驱,后继)B1是B2的前驱,B2是B1的后继:有一个条件或无条件转移语句从B1的最后一条语句转移到B2的第一条语句;或者 在程序的序列中,B2紧接在B1的后面,并且B1的最后一条语句不是一个无条件转移语句。,*(1)read x(2)read y*(3)r:=x mod y(4)if r=0 goto(8)*(5)x:=y(6)y:=r(7)goto(3)*(8)write y(9)halt,练习,f0=0 f1=1 if m=1 goto L3 i=2L1:if i=m goto L3L2:f2=f0+f1 f0=f1
6、 f1=f2 i=i+1 goto L1L3:return m,1,2,3,4,5,以快速排序的C代码为例:,void quicksort(int m,int n)int i,j,v,x;if(nv);if(i=j)break;x=ai;ai=aj;aj=x;x=ai;ai=an;an=x;quicksort(m,j);quicksort(i+1,n);,各种代码优化技术:,快速排序程序的中间代码,i=m-1;j=n;v=an;while(1)do i=i+1;while(aiv);if(i=j)break;x=ai;ai=aj;aj=x;x=ai;ai=an;an=x;,优化技术1删除公共子
7、表达式,如果表达式E已经在前面计算过,并在计算之后E的值没有改变,则称该表达式为公共子表达式。可以避免重复计算。,T6:=4*ix=aT6T7:=4*iT8:=4*jT9=aT8aT7:=T9T10:=4*jaT10:=xgoto B2,T6:=4*ix=aT6T7:=T6T8:=4*jT9=aT8aT7:=T9T10:=T8aT10:=xgoto B2,4*i,4*j重复计算,在更大的范围内删除4*i,4*j的计算,得到:,优化技术2复写传播,T6:=T2x=T3T7:=T2T8:=T4T9=T5aT2:=T5T10:=T4aT4:=T3goto B2,T6:=T2x=aT6T7:=T6T8
8、:=T4T9=aT8aT7:=T9T10:=T8aT10:=xgoto B2,T6:=T2,x=aT6,之间没有改变T6,因此,可以直接写x=aT2,在B2中T3:=aT2因此,x=T3,优化技术3删除无用代码,aT2:=T5aT4:=T3goto B2,T6:=T2x=T3T7:=T2T8:=T4T9=T5aT2:=T5T10:=T4aT4:=T3goto B2,某些变量的赋值无用,在后面的程序中不再有用,aT2:=vaT1:=T3,B5,B6,优化技术4对程序进行代数恒等变换(降低运算强度),a)i*2=2*i=i+i=i2b)i/2=(int)(i*0.5)c)0-1=-1d)f*2=2
9、.0*f=f+fe)f/2.0=f*0.5,优化技术简介对程序进行代数恒等变换(代数简化),x+0=x0+x=xx*1=x1*x=x0/x=0 x-0=xb&true=bb&false=falseb|true=trueb|false=b,优化技术简介对程序进行代数恒等变换(合并已知量),T1:=2T2:=4*T1,T1:=2T2:=8,优化技术5代码外提,对循环中的有些代码,如果它产生的结果在循环中是不变的,可以提到循环外面,while(i=limit-2).,t=limit-2while(i=t).,优化技术6强度削弱,j:=j-1T4=4*jT5=aT4if T5v goto B3,T4=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译原理课程教案 编译 原理 课程 教案 代码 优化

链接地址:https://www.31ppt.com/p-6528799.html