4 公共表达式局部优化 设有下列语句: t := b * c ; e := b * c + b * c ;

Slides:



Advertisements
Similar presentations
完美殺人筆記簿 【爸!我受夠了!】 第七組組員: 林正敏 陳筱涵 李蓓宇 許純宜 羅玉芬 謝文軒.
Advertisements

人的性别遗传 合肥市第四十九中学 丁 艳. 男女成对染色体排序图 1 、男性和女性各 23 对染色体有何异同 ? 哪 一对被称为性染色体 ? 2 、这两幅图中,哪幅 图显示的是男性的染色 体?哪幅图显示的是女 性染色体? 3 、图中哪条染色体是 Y 染色体?它与 X 染色体 在形态上的主要区别是.
10.2.switch语句.
XX啤酒营销及广告策略.
中小学教育网课程推荐网络课程 小学:剑桥少儿英语 小学数学思维训练 初中:初一、初二、初三强化提高班 人大附中同步课程
回归教材、梳理知识、突出能力 ——2015年历史二轮复习思考 李树全 西安市第八十九中学.
1、一般地说,在生物的体细胞中, 和 都是成对存在的。
辨性别 A B. 辨性别 A B 第三节人类染色体与性别决定 昌邑市龙池初中 杨伟红 学习目标 1.理解人的染色体组成和传递规律。 2.解释人类性别决定的原理。 3.通过探究活动,解读数据了解生男生女的比例。
營利事業所得稅查核準則 相關概念介紹 南區國稅局 新營分局 林俊標 各位學員大家好:
第五章 二次型. 第五章 二次型 知识点1---二次型及其矩阵表示 二次型的基本概念 1. 线性变换与合同矩阵 2.
教材版本:新教材人教版九年级(上) 作品名称:同类二次根式 主讲老师:张翀 所在单位:珠海市平沙第一中学.
建筑业2007年年报 2008年定报培训会 及 工交城建科 蔡婉妮
第4章 工业建筑特殊构造 第6篇 工业建筑设计 4.1 防爆构造 对于有爆炸危险的厂房,防爆技术设施分为两大类: 预防性技术措施
湖南师大附中高三政治第二次月考 试题讲评 试题讲评.
06学年度工作意见 2006年8月30日.
組員:4A140013張瓊云 4A1I0039石宜芬 4A1I0909許峻綱 指導老師:王立杰老師
學 號:997I0010、997I0024 組 員:洪韋鈴、王婷婷 日 期: 指導老師:王立杰 老師
清仓处理 跳楼价 满200返160 5折酬宾.
动画分镜头技巧 梁思平.
电话联系.
迎宾员礼仪 包头机电工业职业学校管理系 白琳 1.
1.1.2 四 种 命 题.
色 弱 與 色 盲.
公司法(六) 股份有限公司 1.
一、原函数与不定积分 二、不定积分的几何意义 三、基本积分公式及积分法则 四、牛顿—莱布尼兹公式 五、小结
宠物之家 我的宠物性别? 雌(♀) or 雄(♂) 第一阶段:我的宠物我做主 第二阶段:宠物“相亲记” 第三阶段:家族诞生
2-7、函数的微分 教学要求 教学要点.
课标教材下教研工作的 实践与思考 山东临沂市教育科学研究中心 郭允远.
财 务 会 计 第四篇:供应链会计实务 制作人:谌君、熊瑜.
北师大版七年级数学 5.5 应用一元一次方程 ——“希望工程”义演 枣庄市第三十四中学 曹馨.
初中数学八年级下册 (苏科版) 10.4 探索三角形 相似的条件(2).
指導老師:陳韻如 班級:幼保二甲 姓名:林靜宜 學號:4A0I0033
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
海洋存亡 匹夫有责 ——让我们都来做环保小卫士 XX小学三(3)班.
第八章 符号表 符号表的作用: 一致性检查和作用域分析; 辅助代码生成..
第二章 矩阵(matrix) 第8次课.
6 下标变量的中间代码生成 下标:数组;变量: 下标变量:即数组分量: 简单变量:id,其地址可查到;
走进编程 程序的顺序结构(二).
元素替换法 ——行列式按行(列)展开(推论)
第七章 中间代码优化 优化方法概述 基本块划分 常量表达式优化 公共表达式优化 循环不变式外提.
第二章 Java语言基础.
人教版五年级数学上册第四单元 解方程(一) 马郎小学 陈伟.
第4章 PHP流程控制语句.
Partial Differential Equations §2 Separation of variables
6.4不等式的解法举例(1) 2019年4月17日星期三.
顺序表的删除.
线 性 代 数 厦门大学线性代数教学组 2019年4月24日6时8分 / 45.
复习.
成绩是怎么算出来的? 16级第一学期半期考试成绩 班级 姓名 语文 数学 英语 政治 历史 地理 物理 化学 生物 总分 1 张三1 115
第十章 优化 网上教学系统: : 编译原理 第十章 优化 网上教学系统: : 编译原理.
高山草原生態系 分布於臺灣3000公尺以上高山,如中央山脈.玉山山脈.雪山山脈 分為玉山箭竹草原,高山芒草原及兩者混生林三種
第九节 赋值运算符和赋值表达式.
§6.7 子空间的直和 一、直和的定义 二、直和的判定 三、多个子空间的直和.
3.16 枚举算法及其程序实现 ——数组的作用.
本节内容 Lua基本语法.
1.设A和B是集合,证明:A=B当且仅当A∩B=A∪B
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
第7章 代码优化 学习目标: 掌握:基本块的划分、基本块的DAG优化 理解:什么是局部优化、循环优化、全局优化 了解:循环优化技术.
2.2矩阵的代数运算.
临界区问题的硬件指令解决方案 (Synchronization Hardware)
第15讲 特征值与特征向量的性质 主要内容:特征值与特征向量的性质.
数学题解答 第二章 一元一次方程 2.1从算式到方程 (第1课时) 数学题解答
§2 方阵的特征值与特征向量.
五 循环结构程序设计 厦大附中信息技术.
第三节 数量积 向量积 混合积 一、向量的数量积 二、向量的向量积 三、向量的混合积 四、小结 思考题.
PASCAL语言 吉林大学计算机科学与技术学院.
编译原理实践 6.程序设计语言PL/0.
一元一次方程的解法(-).
§2 自由代数 定义19.7:设X是集合,G是一个T-代数,为X到G的函数,若对每个T-代数A和X到A的函数,都存在唯一的G到A的同态映射,使得=,则称G(更严格的说是(G,))是生成集X上的自由T-代数。X中的元素称为生成元。 A变, 变 变, 也变 对给定的 和A,是唯一的.
9.3多项式乘多项式.
Presentation transcript:

4 公共表达式局部优化 设有下列语句: t := b * c ; e := b * c + b * c ; d := b * c + d ; 优化后,可得到下列语句: t := b * c ; e :=t + t ; c := t + 10 ; d := b * c + d ;

等价的四元式 设(ω1,A1,B1,t1)和(ω2,A2,B2,t2)是非赋值型运算类四元式,若 ω1=ω2,并且 A1 和 A2,B1 和 B2 的值彼此相等,则称这两个四元式等价。即如果四元式的操作码和两个运算分量的值彼此相等,就说两个四元式等价。 公共表达式(可节省的公共代码, ECC:Erasable Common Code ) 如果在基本块中出现多个等价的四元式,则除了第一个外其它的等价的四元式称为第一个四元式的公共表达式,或可节省的公共代码。

公共表达式的值编码优化方法 值编码优化方法的主要思想:公共表达式优化的关键是判断两个分量值是否相等。其主要思想是对中间代码中出现的每个分量确定一个值编码,使得具有相同值编码的分量等价。 μ( 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 ; 优化后: c := t + t ;

基于值编码的ECC优化用到三张表: 值编码表ValuNum :存放变量(或常数)及其值编码; 可用表达式代码表UsableExpr :存放基本块中的可用于匹配的表达式编码四元式; 临时变量等价表PAIR :存放等价的临时变量偶对:(ti,tj)表示ti和tj是等价的,需用ti替换tj;

1. (*,b,c,t1) 2. (*,b,c,t2) 3. (+,t1,t2,t3) 4. (:=,t3,-,a) 实例1: a:=b*c+b*c;d:=b; e:=d*c+b*c; 1. (*,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) ValuNum t1 1. (*,b,c,t1) 2. (+,t1,t1,t3) 3. (:=,t3,-,a) 4. (:=,b,-,d) 5. (:=,t3,-,e) (b,1) (c,2) (t1,3) (t3,4) (a,4) (d,1) (e,4) UsableExpr (*,1,2,3) 1. (*,b,c,t1) 3. (+,t1,t2,t3) (+,3,3,4) PAIR t1 t1 (t1,t2) (t1,t4) (t1,t5) (t3,t6) t3

基于值编码的公共表达式节省算法 从基本块的第一条四元式开始 临时等价变量表PAIR替换, (ti,tj)需用ti替换tj。 对四元式(ω,A,B,t)中运算分量A,B查值编码表进行替换,新出现的运算分量进行新值编码,生成编码四元式。 遇到运算型四元式,在可用表达式表UsableExpr中查与当前编码四元式运算符、运算分量都相同的,若有则说明当前四元式为ECC,删去当前四元式,把结果临时变量填入等价表PAIR。 遇到赋值(=,a,-,b), b编码赋值为a的编码。 首先我们从基本块第一条四元式开始,来看看怎么做。 1、等价名的替换,看看四元式中有没有等价,每一个要做之前都要先做等价名的替换 2、我要为四元式中的变量或者是常量进行编码,这个编码过程和前面是一样的。每一个xx、xx、xx获得了一个编码,就要把他们的编码值填到编码表中,比方说他是从1 2 3往后填,a=1 b=2 t=3. 3、进行编码之后我们就生成了一个编码四元式,前面的运算符不变,但是运算分量和运算结果我们都是用编码来代替的,比方说刚才的就变成了(*,1,2,3) 4、如果编码四元式是一个运算型的四元式,我们就需要从当前的编码四元式开始往前查,查什么呢?查运算符和他相同、运算分量编码和他相同的四元式,如果要是找到了,就意味着当前这个四元式是可以被节省的,我们就找到了一个等价的公共子表达式,如果找不到就算了,如果找到了就意味着当前四元式可以被节省,删去,要把等价的名字填入等价表,哪两个是等价名?就是两个四元式的结果部分,把这两个名字填到等价表里,这就算做完了。然后我们再看下面的四元式,一直扫描完基本块。

a:=b*c+b*c; d:=b; e:=d*c+b*c; 实例1: a:=b*c+b*c; d:=b; e:=d*c+b*c; 序号 中间代码 映像 a b c d e t1 t2 t3 t4 t5 t6 等价表 优化后 1 *,b,c,t1 123 2 3 不变 *,b,c,t2 (t1,t2) 节省 +,t1,t2,t3 334 4 +,t1,t1,t3 =,t3,-,a 5 =,b,-,d 6 *,d,c,t4 (t1,t4) 7 *,b,c,t5 (t1,t5) 8 +,t4,t5,t6 (t3,t6) 9 =,t6,-,e =,t3,-,e

5 循环不变式外提优化 循环不变式:如果一个表达式E在一个循环中不改变其值,则称它为该循环的不变表达式。 循环不变式外提:将循环不变式提到循环外面进行. i:=1; t:=x*y; while i<=1000 do begin a[i]:=t; i:=i+1 end; i:=1; while i<=1000 do begin a[i]:= x*y; i:=i+1 end;

循环不变式外提的关键 识别循环结构(循环入口,循环体,循环出口); 检查循环体中哪些变量的值被改变过; 根据这个结果来看哪些表达式是不变的表达式; 建立变量定值表,将循环体中值被改变的变量都填到表里,若某运算型四元式中两个运算分量都不出现在这个表里,就说明其值不发生改变,可以进行外提。

循环的识别:识别循环的入口、重复体、出口部分。 识别方法:基于程序文本,基于程序流图。 (WHILE , — , — , — ) E 的中间代码 基于程序文本:不需要什么开销;, 基于程序图的识别却需要很大的开销,但其优点是不管是用什么的语句写成的,只要程序图中出现环路即可识别出循环来。 ( DO , E . FORM , — , — ) S的中间代码 (ENDWHILE, — , — , — )

安全性: 不可外提类 1. 除法表达式不能外提(除零溢出) 设有如下循环语句: while E do 安全性: 不可外提类 1. 除法表达式不能外提(除零溢出) 设有如下循环语句: while E do if y=0 then x:=y; else x:= a/y; 假设a/y是不变表达式,若外提: t:=a/y; if y=0 then x:=y; else x:=t; 2. 赋值表达式不能外提( 既使赋值操作的左部和右部都是循环不变式):因为不一定执行该循环。

外提策略: 凡是循环不变式都外提 只外提一定被执行的循环不变式

循环不变式外提算法 对循环体四元式进行第一遍扫描,把循环内被定义的变量填到变量信息表LoopDef ,即若它是一个运算型四元式(ω1,A1,B1,t1),则把t1填到表中,若为赋值型四元式(=,a,-,b)则把b填入表中; 循环不变式外提为第二遍扫描,每遇到一个运算型四元式(ω1,A1,B1,t1),若A1、B1都不在变量信息表中,则将其提到循环体外,同时在变量定值表中删去t1,把t1从本层LoopDef表移到外层LoopDef表;删除原代码 ( ω , A , B , t ) ; 1对循环体进行第一遍扫描,把有定值的变量都找到填到表里,首先从循环体的第一条四元式做起,若他是一个运算型的四元式,%,a b t 就把t填到表里,遇到赋值型时=,a,-,x把x填到变量定值表里。我们从头到尾一条条的扫描就把所需要的信息找出来了。 2循环不变式外提,一条条扫描,遇到一个运算型四元式,看他的两个运算分量是否出现在定值表中,如果都没出现,就是一个不变表达式,就把他提到循环体的外面,我们要把表达式运算结果的变量t从变量定值表中删除掉,然后继续扫描。

外提实例1 优化前四元式序列: i:=1 while i<=100 do begin z:=i*k*5 a:=2*k+2*k*2 (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:=1 while i<=100 do begin z:=i*k*5 a:=2*k+2*k*2 i:=i+1; end t4 LoopDef ={t1, t2, t3, z, t4, t5, t6, t7, a,t8 ,i}

循环优化前四元式序列: LoopDef={t1, t2, t3, z, t4, t6, t7, a,t8 ,i} (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}

循环优化后四元式序列: i:=1 t7 while i<=100 do begin z:=i*k*5 a:=2*k+2*k*2 (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:=1 while i<=100 do begin z:=i*k*5 a:=2*k+2*k*2 i:=i+1; end t7 循环优化前四元式序列: (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, -,-,-) t7

外提实例2 例2:已知:a:array[1..10][1..1000] of integer;设有如下循环语句: j:=1 while j<=1000 do begin a[i][j]:=0; j:=j+1; end; ( SUBI, i , 1, t1) ( MULTI , t1 ,S1,t2 ) ( AADD , a , t2 , t3) ( SUBI, j, 1, t4) ( MULTI , t4 , S2,t5 ) ( AADD , t3, t5, t6 ) 注:S1=1000*sizeof(T)=1000 S2=sizeof(T)=1

优化前的四元式序列: (ASSIG, 1, ─, j) (WHILE, ─, ─, ─) (LE, j, 1000, t1) (DO, t1, ─, ─) (SUBI, i, 1, t2) (MULTI, t2, 1000, t3) (AADD, a, t3, t4) (SUBI, j, 1, t5) (MULTI, t5, 1, t6) (AADD, t4, t6, t7) (ASSIG, 0, ─, t7) (ADDI, j, 1, t8) (ASSIG, t8, ─, j) (ENDWHILE, ─, ─, ─) LoopDef={t1, t2, t3, t4, t5, t6, t7,t8,j} 优化后的四元式序列: (ASSIG, 1, ─, j) (SUBI, i, 1, t2) (MULTI, t2, 1000, t3) (AADD, a, t3, t4) (WHILE, ─, ─, ─) (LE, j, 1000, t1) (DO, t1, ─, ─) (SUBI, j, 1, t5) (MULTI, t5, 1, t6) (AADD, t4, t6, t7) (ASSIG, 0, ─, t7) (ADDI, j, 1, t8) (ASSIG, t8, ─, j) (ENDWHILE, ─, ─, ─) LoopDef={t1, t5, t6, t7,t8} 已知:a:array[1..10][1..1000] of integer; j:=1 while j<=1000 do begin a[i][j]:=0; j:=j+1; end;

6 其它各类优化介绍 1. 消减(降低)运算强度 消减运算强度的意思是:用强度低的运算(执行时间较短的运算)等价地代替强度高的运算。 例如:for j:=1 to 100 do a[j]:=3*j+10; 可优化为: m:=13; for j:=1 to 100 do begin a[j]:=m; m:=m+3; end 乘法运算强度一般比加法运算强度高, 因此可以用加法运算代替乘法运算。 如果乘法运算不在循环内, 那么其效益并不大, 因此都在循环内进行这种优化。设有循环语句: 因此可以用加法运算代替乘法运算。如果乘法运算不在循环内,那么其效益并不大,因此都在循环内进行这种优化。设有循环语句: 其它消减运算强度方法: a) i*2 = 2*i = i+i = i<<1 b) i/2 = (int)(i*0.5) c) 0-1 = -1

2. 复写传播 复写传播优化是把形如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:=…… ;

3. 无用代码消除 复写传播的特例是无用代码消除。假设有赋值语句 a := E ,但此后没有 a 的引用,那么该语句显然是无用的代码,这些代码在复写传播优化时自然被删除掉。 foo(x) { int i; i = x+10; x=25+x*5; }

4.代数简化 x+0 = x 0+x = x x*1 = x 1*x = x 0/x = 0 x-0 = x b && true = b b && false = false b || true = true b || false = b

LoopDef={t3,t6,t7,a,t8,k,t9,t11,t12,t13,j} 例:对下列代码进行优化,其中 A:array[1..100] of integer (: = , 0 , _,a) (+, a, 1, t1) (*, t1, 5, t2) (:=, t2,_, j) (WHILE, _, _, _) (<, j, 100, t3) (Do, t3, _, _) (-,3, 1, t4) (*, t4, 1, t5) ([+], A, t5, t6) (+, a, t6, t7) (:=, t7, _, a) (<, a, 10, t8) (THEN, t8, _, _) (:=, 0, _, k) (ELSE, _, _, _ ) (*, x, y, t9) (*, x, y, t10) (/, t10, 5, t11) (+, t9, t11, t12) (:=, t12, _, k) (ENDIF, _, _, _) (+, j, 1, t13) (:=, t13, _, j) (ENDWHILE, _, _, _) a:=0; j:=(a+1)*5; while j<100 do begin a:=a+A[3]; if a<10 then k:=0; else k:=x*y+x*y/5; j:=j+1; end 5 t9 2 LoopDef={t3,t6,t7,a,t8,k,t9,t11,t12,t13,j}

优化后 (: = , 0 , _,a) (:=,5,_, j) (AADD, A, 2, t6) (*, x, y, t9) (/, t9, 5, t11) (+, t9, t11, t12) (WHILE, _, _, _) (<, j, 100, t3) (Do, t3, _, _) (+, a, t6, t7) (:=, t7, _, a) (<, a, 10, t8) (THEN, t8, _, _) (:=, 0, _, k) (ELSE, _, _, _ ) (:=, t12, _, k) (ENDIF, _, _, _) (+, j, 1, t13) (:=, t13, _, j) (ENDWHILE, _, _, _) a:=0; j:=(a+1)*5; while j<100 do begin a:=a+A[3]; if a<10 then k:=0; else k:=x*y+x*y/5; j:=j+1; end

作业 P152 5