第九章 独立于机器的优化.ppt
《第九章 独立于机器的优化.ppt》由会员分享,可在线阅读,更多相关《第九章 独立于机器的优化.ppt(140页珍藏版)》请在麦多课文档分享上搜索。
1、第九章 独立于机器的优化,第九章 独立于机器的优化,代码优化 通过程序变换(局部变换和全局变换)来改进程序,称为优化 代码改进变换的标准 代码变换必须保程序的含义 采取安全稳妥的策略 变换减少程序的运行时间平均达到一个可度量的值 变换所作的努力是值得的,第九章 独立于机器的优化,本章介绍独立于机器的优化,即不考虑任何依赖目标机器性质的优化变换通过实例来介绍代码改进的主要机会 数据流分析包括的几类重要的全局收集的信息数据流分析的一般框架和一般框架有区别的常量传播部分冗余删除的优化技术循环的识别和分析,9.1 优化的主要种类,9.1.1 优化的主要源头 程序中存在许多程序员无法避免的冗余运算 对于
2、Aij和X.f1这样访问数组元素和结构体的域的操作(例如, Aij = Aij + 10) 随着程序被编译,这些访问操作展开成多步低级算术运算 对同一个数据结构的多次访问导致许多公共的低级运算 程序员没有办法删除这些冗余,9.1 优化的主要种类,9.1.2 一个实例 i = m 1; j = n; v = an; (1) i = m 1 while (1) (2) j = ndo i = i +1; while(aiv); (4) v = at1if (i = j) break; (5) i = i + 1 x=ai; ai=aj; aj=x; (6) t2 = 4 i (7) t3 = at
3、2 x=ai; ai=an; an=x; (8) if t3 v goto (5),9.1 优化的主要种类,9.1.2 一个实例 i = m 1; j = n; v = an; (9) j = j 1 while (1) (10) t4 = 4 j do i = i +1; while(aiv); (12) if t5v goto (9) if (i = j) break; (13) if i =j goto (23) x=ai; ai=aj; aj=x; (14) t6 = 4 i (15 ) x = at6 x=ai; ai=an; an=x; . . .,9.1 优化的主要种类,程序流图
4、,9.1 优化的主要种类,9.1.3 公共子表达式删除 B5 x=ai; ai=aj; aj=x;,t6 = 4 i x = at6 t7 = 4 i t8 = 4 j t9 = at8 at7 = t9 t10 = 4 j at10 = x goto B2,9.1 优化的主要种类,局部公共子表达式删除, 复写传播, 删除死代码 B5 x=ai; ai=aj; aj=x;,t6 = 4 i x = at6 t7 = 4 i t8 = 4 j t9 = at8 at7 = t9 t10 = 4 j at10 = x goto B2,t6 = 4 i x = at6 t8 = 4 j t9 = a
5、t8 at6 = t9 at8 = x goto B2,9.1 优化的主要种类,9.1 优化的主要种类,全局公共子表达式删除, 复写传播, 删除死代码 B5 x=ai; ai=aj; aj=x;,t6 = 4 i x = at6 t7 = 4 i t8 = 4 j t9 = at8 at7 = t9 t10 = 4 j at10 = x goto B2,t6 = 4 i x = at6 t8 = 4 j t9 = at8 at6 = t9 at8 = x goto B2,9.1 优化的主要种类,全局公共子表达式删除, 复写传播, 删除死代码 B5 x=ai; ai=aj; aj=x;,t6 =
6、 4 i x = at6 t7 = 4 i t8 = 4 j t9 = at8 at7 = t9 t10 = 4 j at10 = x goto B2,t6 = 4 i x = at6 t8 = 4 j t9 = at8 at6 = t9 at8 = x goto B2,x = at2 t9 = at4 at2 = t9 at4 = x goto B2,9.1 优化的主要种类,9.1 优化的主要种类,全局公共子表达式删除, 复写传播, 删除死代码 B5 x=ai; ai=aj; aj=x;,t6 = 4 i x = at6 t7 = 4 i t8 = 4 j t9 = at8 at7 = t9
7、 t10 = 4 j at10 = x goto B2,t6 = 4 i x = at6 t8 = 4 j t9 = at8 at6 = t9 at8 = x goto B2,x = at2 t9 = at4 at2 = t9 at4 = x goto B2,9.1 优化的主要种类,全局公共子表达式删除, 复写传播, 删除死代码 B5 x=ai; ai=aj; aj=x;,t6 = 4 i x = at6 t7 = 4 i t8 = 4 j t9 = at8 at7 = t9 t10 = 4 j at10 = x goto B2,t6 = 4 i x = at6 t8 = 4 j t9 = a
8、t8 at6 = t9 at8 = x goto B2,x = at2 t9 = at4 at2 = t9 at4 = x goto B2,x = t3 at2 = t5 at4 = x goto B2,9.1 优化的主要种类,公共子表达式删除、复写传播、删除死代码 B6 x = ai; ai = an; an = x;,t11 = 4 i x = at11 t12 = 4 i t13 = 4 n t14 = at13 at12 = t14 t15 = 4 n at15 = x,x = t3 t14 = at1 at2 = t14 at1 = x,9.1 优化的主要种类,9.1 优化的主要种类
9、,B6 x = ai; ai = an; an = x;at1能否作为公共子表达式?,t11 = 4 i x = at11 t12 = 4 i t13 = 4 n t14 = at13 at12 = t14 t15 = 4 n at15 = x,x = t3 t14 = at1 at2 = t14 at1 = x,9.1 优化的主要种类,i = m 1 j = n t1 = 4 n v = at1,i = i + 1 t2 = 4 i t3 = at2 if t3 v goto B2,B1,B2,j = j 1 t4 = 4 j t5 = at4 if t5 v goto B3,if i =
10、j goto B6,B4,B3,B5,B6,把at1作为公共子表达式是不稳妥的因为B5有对下标变量at2和at4的赋值,9.1 优化的主要种类,9.1.4 复写传播 复写语句:形式为f = g的赋值 优化过程中会大量引入复写,9.1 优化的主要种类,9.1.4 复写传播 复写语句:形式为f = g的赋值 优化过程中会大量引入复写 复写传播变换的做法是在复写语句f = g后,尽可能用g代表fB5,x = t3 at2 = t5 at4 = t3 goto B2,x = t3 at2 = t5 at4 = x goto B2,9.1 优化的主要种类,9.1.4 复写传播 复写语句:形式为f = g
11、的赋值 优化过程中会大量引入复写 复写传播变换的做法是在复写语句f = g后,尽可能用g代表f 复写传播变换本身并不是优化,但它给其它优化带来机会 常量合并(编译时可完成的计算) 死代码删除,pi = 3.14 y = pi 5,9.1 优化的主要种类,9.1.5 死代码删除 死代码是指计算的结果决不被引用的语句 一些优化变换可能会引起死代码例: 为便于调试,可能在程序中加打印语句,测试 后改成右边的形式debug = true; | debug = false;. . . | . . .if (debug) print | if (debug) print 靠优化来保证目标代码中没有该条件语
12、句部分,9.1 优化的主要种类,9.1.5 死代码删除 死代码是指计算的结果决不被引用的语句 一些优化变换可能会引起死代码 例:复写传播可能会引起死代码删除B5,x = t3 at2 = t5 at4 = t3 goto B2,at2 = t5 at4 = t3 goto B2,x = t3 at2 = t5 at4 = x goto B2,9.1 优化的主要种类,9.1.6 代码外提 代码外提是循环优化的一种 循环优化的其它重要技术 归纳变量删除 强度削弱 例:while (i = limit 2 ) 代码外提后变换成t = limit 2;while (i = t ) ,9.1 优化的主要
13、种类,9.1.7 强度削弱和归纳变量删除 j和t4的值步伐一致地变化 这样的变量叫做归纳变量 在循环中有多个归纳变量时,也许只需要留下一个 这个操作由归纳变量删除过程来完成 对本例可以先做强度削弱它给删除归纳变量创造机会,9.1 优化的主要种类,j = j 1 t4 = 4 j t5 = at4 if t5 v goto B3,B3,除第一次外, t4 = 4 j在B3的入口一定保持 在j = j 1后, 关系t4 = 4 j + 4也 保持,9.1 优化的主要种类,9.1 优化的主要种类,9.1 优化的主要种类,9.1 优化的主要种类,9.2 数据流分析介绍,9.2.1 数据流抽象 流图上的
14、点 基本块中,两个相邻的语句之间为程序的一个点 基本块的开始点和结束点 流图上的路径 点序列p1, p2, , pn,对1和n - 1间的每个i,满足 (1) pi是先于一个语句的点,pi1是同一块中位于该语句后的点,或者 (2) pi是某块的结束点,pi1是后继块的开始点,9.2 数据流分析介绍,9.2.1 数据流抽象 流图上路径实例- (1, 2, 3, 4, 9)- (1, 2, 3, 4, 5, 6, 7, 8, 3, 4, 9)- (1, 2, 3, 4, 5, 6, 7, 8, 3, 4, 5, 6, 7, 8, 3, 4, 9)- (1, 2, 3, 4, 5, 6, 7, 8,
15、 3, 4, 5, 6, 7, 8, 3, 4, 5, 6, 7, 8, )路径长度无限- 路径数无限,9.2 数据流分析介绍,9.2.1 数据流抽象分析程序的行为时,必 须在其流图上考虑所有的 执行路径(在调用或返回 语句被执行时,还需要考 虑执行路径在多个流图之 间的跳转)- 通常,从流图得到的程序执行路径数无限,且执行路径长度没有有限的上界,9.2 数据流分析介绍,9.2.1 数据流抽象分析程序的行为时,必 须在其流图上考虑所有的 执行路径(在调用或返回 语句被执行时,还需要考 虑执行路径在多个流图之 间的跳转)- 每个程序点的不同状态数也可能无限程序状态:存储单元到值的映射,9.2 数
16、据流分析介绍,9.2.1 数据流抽象把握所有执行路径上的所有程序状态一般来说是不可能的数据流分析并不打算区分到达一个程序点的不同执行路径,也不试图掌握该点每个完整的状态它从这些状态中抽取解决特定数据流分析所需信息,以总结出用于该分析目的的一组有限的事实并且这组事实和到达这个程序点的路径无关,即从任何路径到达该程序点都有这样的事实分析的目的不同,从程序状态提炼的信息也不同,9.2 数据流分析介绍,9.2.1 数据流抽象 点(5)所有程序状态: a 1, 243 由d1, d3定值 (1) 到达定值- d1, d3的定值到达点(5) (2) 常量合并- a在点(5)不是常量,9.2 数据流分析介绍
17、,9.2.3 到达-定值 到达一个程序点的所有定值 可用来判断一个变量在某程序点是否为常量 可用来判断一个变量在某程序点是否无初值 别名给到达-定值的计算带来困难 过程参数、数组访问、间接引用等都有可能引起别名例如:若p=q,则p-next和q-next互为别名 程序分析必须是稳妥的 本章其余部分仅考虑变量无别名的情况,9.2 数据流分析介绍,9.2.3 到达-定值 到达一个程序点的所有定值 可用来判断一个变量在某程序点是否为常量 可用来判断一个变量在某程序点是否无初值 别名给到达-定值的计算带来困难定值的注销 在一条执行路径上,对x的赋值注销先前对x的所有赋值,9.2 数据流分析介绍,gen
18、和kill分别表示一个基本块生成和注销的定值,gen B1 = d1, d2, d3 kill B1=d4, d5, d6, d7,gen B2 = d4, d5 kill B2 = d1, d2, d7,gen B3 = d6 kill B3 = d3,gen B4 = d7 kill B4 = d1, d4,9.2 数据流分析介绍,基本块的gen和kill是怎样计算的 对三地址指令 d: u = v + w,它的状态迁移函数是fd(x) = gend (x killd) 若:f1(x) = gen1 (x kill1), f2(x) = gen2 (x kill2)则: f2(f1(x)
19、= gen2 (gen1 (x kill1) kill2)= (gen2 (gen1 kill2) (x (kill1 kill2) 若基本块B有n条三地址指令killB = kill1 kill2 killn genB = genn (genn1 killn) (genn2 killn1 killn) (gen1 kill2 kill3 killn),9.2 数据流分析介绍,到达-定值的数据流等式genB:B中能到达B的结束点的定值语句killB:整个程序中决不会到达B结束点的定值INB:能到达B的开始点的定值集合OUTB:能到达B的结束点的定值集合两组等式(根据gen和kill定义IN和O
20、UT)INB = P是B的前驱 OUTPOUTB = genB (INB killB)OUTENTRY = 到达-定值方程组的迭代求解,9.2 数据流分析介绍,IN B OUT B B1 000 0000 B2 000 0000 B3 000 0000 B4 000 0000,gen B1 = d1, d2, d3 kill B1=d4, d5, d6, d7,gen B2 = d4, d5 kill B2 = d1, d2, d7,gen B3 = d6 kill B3 = d3,gen B4 = d7 kill B4 = d1, d4,9.2 数据流分析介绍,IN B OUT B B1 0
21、00 0000 000 0000 B2 000 0000 B3 000 0000 B4 000 0000,gen B1 = d1, d2, d3 kill B1=d4, d5, d6, d7,gen B2 = d4, d5 kill B2 = d1, d2, d7,gen B3 = d6 kill B3 = d3,gen B4 = d7 kill B4 = d1, d4,9.2 数据流分析介绍,IN B OUT B B1 000 0000 111 0000 B2 000 0000 B3 000 0000 B4 000 0000,gen B1 = d1, d2, d3 kill B1=d4, d
22、5, d6, d7,gen B2 = d4, d5 kill B2 = d1, d2, d7,gen B3 = d6 kill B3 = d3,gen B4 = d7 kill B4 = d1, d4,9.2 数据流分析介绍,IN B OUT B B1 000 0000 111 0000 B2 111 0000 000 0000 B3 000 0000 B4 000 0000,gen B1 = d1, d2, d3 kill B1=d4, d5, d6, d7,gen B2 = d4, d5 kill B2 = d1, d2, d7,gen B3 = d6 kill B3 = d3,gen B
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
2000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第九 立于 机器 优化 PPT
