版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
14公共表达式局部优化设有下列语句:
t:=b*c;e:=b*c+b*c;c:=b*c+10;d:=b*c+d;优化后,可得到下列语句:t:=b*c;e:=t+t;c:=t+10;d:=b*c+d;2等价的四元式
设(ω1,A1,B1,t1)和(ω2,A2,B2,t2)是非赋值型运算类四元式,若ω1=ω2,并且A1
和A2,B1
和B2的值彼此相等,则称这两个四元式等价。即如果四元式的操作码和两个运算分量的值彼此相等,就说两个四元式等价。
公共表达式(可节省的公共代码,ECC:ErasableCommonCode
)如果在基本块中出现多个等价的四元式,则除了第一个外其它的等价的四元式称为第一个四元式的公共表达式,或可节省的公共代码。3公共表达式的值编码优化方法值编码优化方法的主要思想:公共表达式优化的关键是判断两个分量值是否相等。其主要思想是对中间代码中出现的每个分量确定一个值编码,使得具有相同值编码的分量等价。μ(x)表示任意运算分量x的值编码;NewVN为新值编码产生器,首次产生1,以后每次递增1。把(μ(A),μ(B),μ(t))叫作(ω,A,B,t)的影像码,(ω,μ(A),μ(B),μ(t))为编码四元式;优化前
t:=b*c;c:=b*c+b*c;d:=b*c+d;优化后:t:=b*c;c:=t+t;d:=b*c+d;4基于值编码的ECC优化用到三张表:值编码表ValuNum:存放变量(或常数)及其值编码;可用表达式代码表UsableExpr:存放基本块中的可用于匹配的表达式编码四元式;临时变量等价表PAIR:存放等价的临时变量偶对:(ti,tj)表示ti和tj是等价的,需用ti替换tj;51.(*,b,c,t1)2.(*,b,c,t2)
3.(+,t1,t2,t3)4.(:=,t3,-,a)5.(:=,b,-,d)6.(*,d,c,t4)7.(*,b,c,t5)
8.(+t4,t5,t6)9.(:=,t6,-,e)ValuNumUsableExprPAIR(b,1)(c,2)(t1,3)(t1,t2)(t3,4)(a,4)(d,1)(t1,t4)(t1,t5)(t3,t6)(e,4)t1t1t1t31.(*,b,c,t1)(*,1,2,3)3.(+,t1,t2,t3)(+,3,3,4)实例1:a:=b*c+b*c;d:=b;
e:=d*c+b*c;1.(*,b,c,t1)2.(+,t1,t1,t3)3.(:=,t3,-,a)4.(:=,b,-,d)5.(:=,t3,-,e)6基于值编码的公共表达式节省算法从基本块的第一条四元式开始临时等价变量表PAIR替换,(ti,tj)需用ti替换tj。对四元式(ω,A,B,t)中运算分量A,B查值编码表进行替换,新出现的运算分量进行新值编码,生成编码四元式。遇到运算型四元式,在可用表达式表UsableExpr中查与当前编码四元式运算符、运算分量都相同的,若有则说明当前四元式为ECC,删去当前四元式,把结果临时变量填入等价表PAIR。遇到赋值(=,a,-,b),b编码赋值为a的编码。7序号中间代码映像abcdet1t2t3t4t5t6等价表优化后1*,b,c,t1123123不变2*,b,c,t21233(t1,t2)节省3+,t1,t2,t33344+,t1,t1,t34=,t3,-,a4不变5=,b,-,d1不变6*,d,c,t41233(t1,t4)节省7*,b,c,t51233(t1,t5)节省8+,t4,t5,t63344(t3,t6)节省9=,t6,-,e=,t3,-,e实例1:a:=b*c+b*c;d:=b;
e:=d*c+b*c;8循环不变式外提优化属于非全局优化的一种方法。循环不变式:如果一个表达式E:(ω,A,B,t)中的所有分量A和B在该循环的执行过程中始终不改变值,则称它为该循环的不变表达式。循环不变式外提:将循环不变式E提到循环外面去,外提后运算结果t也将成为该循环的不变量。5循环不变式外提优化i:=1;whilei<=1000dobegina[i]:=
x*y;i:=i+1
end;i:=1;t:=x*y;whilei<=1000dobegina[i]:=t;i:=i+1end;矩阵乘法:有a,b为10*10数组for(i=1~10)for(j=1~10)for(k=1~10)c[i][j]=c[i][j]+a[i][k]*b[k][j];a[i]和c[i]地址的计算与j、k循环无关,c[i][j]地址的计算与k循环无关10循环不变式外提的关键识别循环结构(循环入口,循环体,循环出口);检查循环体中哪些变量的值被改变过;根据这个结果来看哪些表达式是不变的表达式;建立变量定值表LoopDef表,将循环体中值被改变的变量都填到表里,若某运算型四元式中两个运算分量都不出现在这个表里,就说明其值不发生改变,可以进行外提。11(1)循环的识别:识别循环的入口、重复体、出口部分。识别方法:基于程序文本,基于程序流图。E的中间代码
(DO,E.FORM,—,—)S的中间代码
(ENDWHILE,—,—,—)(WHILE,—,—,—)12(2)外提对象循环不变量:如果变量x在一个循环的执行中始终不改变值,则称此变量为循环不变量。注意:对于其外层循环来说,x也可能不是循环不变量。循环的不变表达式:如果一个表达式(ω,A,B,t)中的所有分量A和B在该循环的执行过程中始终不改变值,则称它为循环不变式。循环不变式外提是指把循环中的不变表达式提到本层循环的入口处。外提后运算结果t也将成为该循环不变量,可能引起后面连带的不变式外提。外提对象通常是运算代码,循环不变式外提的重要性主要体现在数组下标变量的地址外提优化。131、
除法表达式不能外提(除零溢出)设有如下循环语句:
whileEdo ify=0thenx:=y;elsex:=
a/y;假设a/y是不变表达式,若外提:
t:=a/y;
whileEdoify=0thenx:=y;elsex:=t;2、
赋值表达式不能外提
赋值外提是指赋值操作的左部和右部都是循环不变式的情况。赋值表达式不能外提是因为不一定执行该循环,也就不会执行该赋值语句,但外提则肯定执行赋值。(3)安全性:
不可外提类※3、数值运算表达式的分量为间接访问型(indir),该表达式不外提(注意:不包括地址加操作AADD)(1)-(3)可以外提,外提后t3为循环不变式,但t3为间接访问型变量,使得(4)不能外提,否则运行时k总是11过程或函数调用中可以改变全局变量的值,也可以通过地址引用型形参改变实参的值,也就是过程、函数的调用会对主调函数产生影响,需要进行复杂的全局分析才能确定是否会引起循环内变量的改变。地址引用型变量(即指针变量)由于保存的是其他变量的地址或别名,可以灵活地改变其他变量的值,具体改变了哪个变量的值需要通过别名分析确定。我们把包含过程、函数调用或地址引用型变量赋值的循环称为非良性循环,为了保证优化安全性,对非良性循环不进行循环不变式外提优化。4、循环体包含函数调用或地址引用型变量赋值的不执行外提优化a:array[1..10]ofreal优化代码:m=0;whilei<=100dobegin
m=a[k]+1;a[p]=i;i=i+1end(=,0,_,m)(WHILE,─,─,─)(LE,i,100,t1)(DO,t1,─,─)(-,k,1,t2)(*,t2,2,t3)(AADD,a,t3,t4)(+,t4,1,t5)(=,t5,_,m)(-,p,1,t6)(*,t6,2,t7)(AADD,a,t7,t8)(=,i,_,t8)(+,i,1,t9)(=,t9,_,i)(ENDWHILE,─,─,─)可外提t4为引用型,不可外提赋值不外提可外提不外提17(4)外提策略:fori=1to100doifx>0thena[i]:=E1;elseb[i]:=E2;策略1:凡是循环不变式都外提t1:=E1;t2:=E2;fori=1to100doifx>0thena[i]:=t1;elseb[i]:=t2;策略2:只外提一定被执行的循环不变式fori=1to100doifx>0thena[i]:=E1;elseb[i]:=E2;18循环不变式外提算法对循环体四元式进行第一遍扫描,把循环内被定义的变量填到变量信息表LoopDef,即若它是一个运算型四元式(ω1,A1,B1,t1),则把t1填到表中,若为赋值型四元式(=,a,-,b)则把b填入表中;循环不变式外提为第二遍扫描,每遇到一个运算型四元式(ω1,A1,B1,t1),若A1、B1都不在变量信息表中,且A1、B1都不是引用型变量,则将其提到循环体外,则做:
a.将(ω,A,B,t)外提到本层循环入口处;
b.把t从本层LoopDef表移到外层LoopDef表;
c.删除原代码(ω,A,B,t);判断本层循环外提是否结束?若是,则删除本层定值表LoopDef并继续外层循环操作,直至结束。19优化前四元式序列:
(ASSIG,1,─,i)
(WHILE,—,—,—) (LE,i,100,t1)
(DO,t1,—,—) (MULTI,i,k,t2) (MULTI,t2,5,t3) (ASSIG,t3,─,z)
(MULTI,2,k,t4)
(MULTI,2,k,t5)
(MULTI,t5,2,t6)
(ADDI,t4,t6,t7) (ASSIG,t7,─,a) (ADDI,i,1,t8) (ASSIG,t8,─,i)
(ENDWHILE,—,—,—)i:=1whilei<=100do beginz:=i*k*5 a:=2*k+2*k*2 i:=i+1; endt4LoopDef={t1,t2,t3,z,t4,t5,t6,t7,
a,t8,i}外提实例120循环优化前四元式序列:
(ASSIG,1,─,i)
(WHILE,-,-,-) (LE,i,100,t1)
(DO,t1,-,-) (MULTI,i,k,t2) (MULTI,t2,5,t3) (ASSIG,t3,-,z)
(MULTI,2,k,t4)
(MULTI,t4,2,t6)
(ADDI,t4,t6,t7) (ASSIG,t7,─,a) (ADDI,i,1,t8) (ASSIG,t8,─,i)
(ENDWHILE,-,-,-)LoopDef={t1,t2,t3,z,t4,t6,t7,
a,t8,i}21循环优化前四元式序列:
(ASSIG,1,─,i)
(WHILE,-,-,-) (LE,i,100,t1)
(DO,t1,—,—) (MULTI,i,k,t2) (MULTI,t2,5,t3) (ASSIG,t3,─,z)
(MULTI,2,k,t4)
(MULTI,t4,2,t6)
(ADDI,t4,t6,t7) (ASSIG,t7,─,a) (ADDI,i,1,t8) (ASSIG,t8,─,i)
(ENDWHILE,-,-,-)循环优化后四元式序列:
(ASSIG,1,─,i)
(MULTI,2,k,t4)
(MULTI,t4,2,t6)
(ADDI,t4,t6,t7)
(WHILE,-,-,-) (LE,i,100,t1)
(DO,t1,—,—) (MULTI,i,k,t2) (MULTI,t2,5,t3) (ASSIG,t3,─,z) (ASSIG,t7,─,a) (ADDI,i,1,t8) (ASSIG,t8,─,i)
(ENDWHILE,,-,-)i:=1whilei<=100do beginz:=i*k*5 a:=2*k+2*k*2 i:=i+1; endt7t722外提实例2例2:已知:a:array[1..10][1..1000]ofinteger;设有如下循环语句:
j:=1 whilej<=1000do begina[i][j]:=0;j:=j+1;end;
(-,i,1,t1)(*,t1,1000,t2)([+],a,t2,t3)(-,j,1,t4)(*,t4,1,t5)([+],t3,t5,t6)注:S1=1000*sizeof(T)=1000
S2=sizeof(T)=123优化后的四元式序列:(=,1,─,j)(-,i,1,t2)(*,t2,1000,t3)([+],a,t3,t4)(WHILE,─,─,─)(LE,j,1000,t1)(DO,t1,─,─)(-,j,1,t5)(*,t5,1,t6)([+],t4,t6,t7)(=,0,─,t7)(+,j,1,t8)(=,t8,─,j)(ENDWHILE,─,─,─)LoopDef={t1,t5,t6,t7,t8}优化前的四元式序列:(=,1,─,j)(WHILE,─,─,─)(<=,j,1000,t1)(DO,t1,─,─)(-,i,1,t2)(*,t2,1000,t3)([+],a,t3,t4)(-,j,1,t5)(*,t5,1,t6)([+],t4,t6,t7)(=,0,─,t7)(+,j,1,t8)(=,t8,─,j)(ENDWHILE,─,─,─)LoopDef={t1,t2,t3,t4,t5,t6,t7,t8,j}已知:a:array[1..10][1..1000]ofinteger;
j:=1whilej<=1000dobegina[i][j]:=0;
j:=j+1;end;三重循环语句的外提过程,其中A:Array[0..9][0..9][0..9]ofinteger;外提实例3FORi:=0TO9DOFORj:=0TO9DO FORk:=0TO9DOA[i][j][k]:=i*j*k ENDFORENDFORENDFORFORi:=0TO9DOFORj:=0TO9DOFORk:=0TO9DO(1)(-,i,0,t1)…..一维偏移计算(2)(*,t1,100,t2)(3)([+],A,t2,t3)(4)(-,j,0,t4)….二维偏移计算(5)(*,t4,10,t5)(6)([+],t3,t5,t6)(7)(-,k,0,t7)…
三维偏移计算(8)(*,t7,1,t8)(9)([+],t6,t8,t9)(10)(*,i,j,t10)(11)(*,t10,k,t11)(12)(=,t11,—,t9) ENDFOR ENDFORENDFORFORi:=0TO9DOFORj:=0TO9DOFORk:=0TO9DO(1)(-,i,0,t1)…..一维偏移(2)(*,t1,100,t2)(3)([+],A,t2,t3)(4)(-,j,0,t4)….二维偏移(5)(*,t4,10,t5)(6)([+],t3,t5,t6)(7)(-,k,0,t7)…
三维偏移(8)(*,t7,1,t8)(9)([+],t6,t8,t9)(10)(*,i,j,t10)(11)(*,t10,k,t11)(12)(=,t11,—,t9) ENDFOR ENDFORENDFORFORi:=0TO9DO(1)(-,i,0,t1)…..一维偏移(2)(*,t1,100,t2)(3)([+],A,t2,t3)FORj:=0TO9DO(4)(-,j,0,t4)….二维偏移(5)(*,t4,10,t5)(6)([+],t3,t5,t6)(10)(*,i,j,t10) FORk:=0TO9DO(7)(-,k,0,t7)…三维偏移(8)(*,t7,1,t8)(9)([+],t6,t8,t9)(11)(*,t10,k,t11)(12)(=,t11,—,t9) ENDFORENDFORENDFOR266
其它各类优化介绍1.消减(降低)运算强度消减运算强度的意思是:用强度低的运算(执行时间较短的运算)等价地代替强度高的运算。例如:forj:=1to100doa[j]:=3*j+10;可优化为:m:=13;forj:=1to100dobegina[j]:=m;m:=m+3;end其它消减运算强度方法:a)i*2=2*i=i+i=i<<1b)i/2=(int)(i*0.5)c)0-1=-1272.复写传播复写传播优化是把形如a:=b的复写型赋值语句删除掉,其中a和b都是变量。如果此后a和b都不变,则很显然a:=b可以删除的,但是要把以后的a都换成b。假设有下列语句:a:=b;c:=a+1;d:=a+c;a:=……;经复写传播优化后,得到下列语句:c:=b+1;d:=b+c;a:=……;283.
无用代码消除复写传播的特例是无用代码消除。假设有赋值语句a:=E,但此后没有a的引用,那么该语句显然是无用的代码,这些代码在复写传播优化时自然被删除掉。foo(x){inti;i=x+10;x=25+x*5;}294.代数简化
x+0=x
0+x=x
x*1=x
1*x=x
0/x=0
x-0=x
b&&true=bb&&false=false
b||true=true
b||false=b3
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中国铁路青藏集团招聘考试试卷真题
- 2025年福建高校毕业生服务社区计划招募考试试卷真题
- 2026年小学六年级英语第二学期期末考试卷及答案(二十)
- 婚恋情感心理障碍疏导干预
- 营业部经理如何平衡评估中的公平性和公正性
- 《铁路桥梁施工与维护(第2版)》课件 项目10 铁路顶进桥涵施工
- 译林版英语四年级下册第8单元作业单(一)
- (2026年)学年第一学期市场营销学期末试卷A答案
- (新)医疗价格调整制度2篇
- 2026边境联络员面试题及答案
- 安全试题100道及答案
- 物业水电工应知应会培训
- 药品儿童用药管理制度
- 白细胞瘀滞症诊疗研究进展
- 恙虫病临床诊疗专家共识指南
- 水利安全风险防控“六项机制”与安全生产培训
- 25年小升初作文押题+范文
- TCPQSXF006-2023消防水带产品维护更换及售后服务
- 教科版小学四年级科学下册复习教案
- 健康体重管理指导课件
- 杭州市住宅品质提升设计导则(试行)2025
评论
0/150
提交评论