第9章 代码优化.ppt

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

若运算对象为T表中的量,则用相应的cons值代替它; 若为形如Ti :=O1 op O2的代码(op仅指+、-、*、/),且两个运算对象均为常数,则合并常数,将所得结果与Ti一起填入T表,并删除此代码。 若为形如A :=B的代码: 若B为常数,则将A与此常数填入T表;若T表中已有A,则更新A的值。 若B不为常数,但A在T表中,则将A从T表中删除 * I:=2+5; J:=I+3; K:=2*I+J; I:=J+K+M; (1)T1:=2+5 (2)I:=T1 (3)T2:=I+3 (4)J:=T2 (5)T3:=2*I (6)T4:=T3+J (7)K:=T4 (8)T5:=J+K (9)T6:=T5+M (10)I:=T6 (1)I:=7; (2)J:=10; (3)K:=24 (4)T6:=34+M (5)I:=T6 优化前 优化后 T表 Name cons T1 7 I 7 T2 10 J 10 T3 14 T4 24 K 24 T5 34 * 多余运算:在此计算之前已存在一个与它完全相同的运算,且该运算所依赖的全部变量中没有一个在这两次运算之间被别的运算所改变。 A:=X*(Y-Z) B:=X/(Y-Z) T:=Y-Z; A:=X*T; B:=X/T; * * D:=D+C*B; A:=D+C*B; C:=D+C*B; (1)T1:=C*B; (2)T2:=D+T1; (3)D:=T2; (4)T3:=C*B; (5)T4:=D+T3; (6)A:=T4; (7)T5:=C*B (8)T6:=D+T5 (9)C:=T6 (1)T1:=C*B; (2)T2:=D+T1; (3)D:=T2; (4)T4:=D+T1; (5)A:=T4; (6)T6:=D+T1 (7)C:=T6 优化前 优化 未改变B、C值 是多余运算 未改变B、C值 是多余运算 D的值变了 不是多余运算 未改变D、T1 是多余运算 再优化 (1)T1:=C*B; (2)T2:=D+T1; (3)D:=T2; (4)T4:=D+T1; (5)A:=T4; (6)C:=T4 在本页讲述演示内容,先进行简单介绍 * * 等价变换:不改变运行结果。 优化是增加了编译时间,减少了运行时间。 优化的宗旨:花费的代价不很大,但收效较大。 * 在中、小型机器上一般都采用局部优化,因为全局优化要考虑的因素较多,优化比较复杂,开销也较大,但效果较好。 * B*C:是循环不变运算。这种优化的关键是找出循环不变运算 * A[I]每次都增加25,可用加代替乘。 * 第九章 代码优化 9.1 概述 9.2 基本块内的优化 * 1.优化概念 2.优化方法 合并已知量 删除多余运算 代码外提 强度消弱 删除无用赋值 * 等价原则:对程序或中间代码进行各种等价变换,使得从变换后的程序出发,能生成更有效的目标代码。 有效原则:优化的目的在于既要设法缩小存储空间,又要尽量提高运行速度,而且更偏重于提高运行速度。 合算原则:应尽可能以较低的代价取得较好的优化效果。 * 不同的用户要求的优化程度不同,有的可能不需要优化。 解决办法是产生几个编译的版本: COM1:不优化; COM2:低级优化; COM3:高级优化; * 与计算机无关的优化 在源程序或中间语言一级上进行(讲) 注重于程序的结构,对程序流程进行有效性、等价性处理。 与计算机有关的优化 依赖具体计算机的硬件环境,在生成目标代码时进行优化。 * 从优化与源程序的关系出发,又可将优化分为: 全局优化: 以整个程序作为对象进行全面分析(如数据流分析) 局部优化:(基本块内,循环) 在特定范围内利用该范围的特点进行优化(讲) * 例: A:=5*4+B; C:=2*3.14*R; 5*4 2*3.14 常数运算,不用运行即可知道结果,因此,可在编译时计算出结果。 优化后: A:=20+B; C:=6.28*R * 删除多余运算:即找出公共子表达式 A:=B*C*D+E; C:=B*C*D-E; T:=B*C*D; A:=T+E; C:=T-E; B:=B*C+E; A:=B*C-E; 不能优化, ∵B的值变了。 * * 将循环不变运算提到循环外。 FOR I:=1 TO 1000 DO A[I]:=B*C; 循环不变运算 * 一般只用于循环中。 FOR I:=1 TO 1000 DO A[I]:=I*25; 25 50 75 … A[1] A[2] A[3] 无用赋值: X:=B+C; A:=B-C; A:=B

文档评论(0)

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

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

1亿VIP精品文档

相关文档