到达-定值的迭代算法 - read.ppt

  1. 1、本文档共161页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
到达-定值的迭代算法 - read

公共子表达式 1、定义: 如果表达式E先前已计算,并且从先 前的计算至现在,E中变量的值没有 改变,那么E的这次出现称为公共子 表达式。 2、优化的方法----删除公共子表达式 ????在B5中,对t7和t10的赋值分别有公共子表达式4*i和4*j在它们的右部。如果用t6代替t7;t8代替t10,删除这些公共子表达式,就可以避免表达式的重复计算,达到优化的目的。 例1:删除B5中的公共子表达式. 例2: 在例1中,我们删除的只是B5基本 块中的局部公共子表达式。下面我 们看一个既有局部子表达式,又有 全局子表达式的例子。我们采用先 删除局部子表达式,后删除全局子 表达式的方法。这涉及到一种新的 优化方法——复写传播 复写传播 例1中的流图经过删除公共子表达式优化后还存在进一步改进的地方。 以B5为例: 复写传播(续) 复写传播:复写传播和一种形式为f:=g的赋值有关, 复写传播变换的做法是在复写语句f:=g后,尽可能 用g代替f。 ? 死代码删除 如果变量的值以后还要引用,则 称它在程序的一点是活跃的;否 则它在该点是死亡的。死代码指 其计算的值绝不被引用的代码。 死代码删除(续) 例如: ??????????… … ???????????????? ???debug := false ??? ????????????? if (debug) print … … ????????????????????… … 死代码删除(续) 复写传播的优点之一是它常常使得复写语句成为死代码。 例如:在下图中的B5经过公共子表达式删除、复写传播, 我们看死代码删除后的情况是什么样。 循环优化 现在我们简短介绍一下非常重要的可优化的地方, 即循环。尤其是程序消耗它大部分时间的内循环。 如果减少内循环的指令数,即使增加了外循环的 指令数,程序的运行时间也可以减少。 代码外提 代码外提是减少循环中代码总数的一 个重要办法。这种变换是把循环不变 计算(即产生的结果独立于循环执行 次数的表达式)放到循环的前面。(注 意:这里隐含着循环只存在一个入口) ?? ???? 代码外提(续) 例如:下面是一个while语句: ????????????while ( i = limit-2 ) ???????????????? 循环体 假设while的循环体不改变limit的值,那 么limit-2是循环不变计算。代码外提的 结果是: ????????????t=limit-2; ????????????while ( i = t ) ???????????????? 循环体 当然while的循环体也不改变t的值。 强度削弱 强度削弱是指用较快的操作代替较慢的操作,如 用加法代替乘法。我们通过举例说明什么叫强度 削弱。 强度削弱(续) 强度削弱(续) 注意到:当用t4:=t4-4代替t4:=4*j后,出现 一个问题是第一次进B3时t4没有初值,所以在j本身置初值的那一块末尾给t4置恰当初值4*j。在图中,这个语句放在块B1的最后。 归纳变量删除 1、什么是归纳变量 在做完强度削弱的流图中,注意到:在B3的内循环中, 因为4*j赋给t4 ,j和t4的值步伐一致地变化,每次j的 值减1,t4的值减4;同理,在B2的内循环中,i和t2的 值步伐一致地变化,这样的标识符就叫做归纳变量。 2、什么是删除归纳变量 如果在循环中有两个或更多的归纳变量,也许可以只 留一个,去掉其余的,这个过程称为删除归纳变量。 归纳变量删除(续) 例如: 把强度削减用于B2和B3的内循环,i 和j的作用仅在于决定B4的测试结果。 我们已知道i和t2满足关系t2:=4*i;j和t4 满足关系t4:=4*j,那么测试t2=t4等价 于i=j。我们用t2=t4替代i=j后,B2的 i和B3的j就成了死变量,在这些块中 对它们的赋值也就成了死代码,可以 删除。删除结果如图所示。 归纳变量删除(续) 很明显,这种代码变换是有效的。流图 经过强度削弱和归纳变量删除后,块B2 和块B3的指令数都从原

文档评论(0)

yanpizhuang + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档