欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    编译原理 代码优化.ppt

    • 资源ID:4526574       资源大小:276.51KB        全文页数:51页
    • 资源格式: PPT        下载积分:5金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    编译原理 代码优化.ppt

    代码优化,代码优化的目标,提高最终目标代码的运行效率(性能)时间:运行的更快 空间:降低内存需求保持源程序的语义,代码优化的种类,窥孔优化局部优化基本块内优化全局优化基本块间优化(过程内)过程间优化程序全局优化,代码优化的种类窥孔优化,“孔”未优化的目标代码片段(windows)窥孔优化种类:删除冗余的存、取操作e.g.mov r0,a/r0-amov a,r0/a-r0,可删除 删除不可达代码,代码优化的种类窥孔优化,e.g.goto L1goto L2/语句前无标号,死代码L1:L2:控制流优化,代码优化的种类窥孔优化,goto L1L1:goto L2,goto L2L1:goto L2,if ab goto L1L1:goto L2,if ab goto L2L1:goto L2,goto L1/唯一跳转L1/L1前是无条件跳转L1:if a b goto L2L3:,if a b goto L2goto L3L3:,代码优化的种类窥孔优化,强度消弱、删除无用指令e.g.MUL$8,R0-ShiftLeft$3,R0ADD$0,R1/删除,未改变R1MUL$1,R2/删除 利用目标机指令特点e.g.inc、enter(建立栈帧)leave(清除栈帧)CISC 系统的“复杂”寻址模式 其它优化措施,如常量合并、复写传播等,代码优化的种类局部优化,基本块和流图 基本块:能顺序执行的程序代码序列。其入口为:程序的第一代码 条件或无条件转移代码所转到的目标代码 跟在条件或无条件转移代码后的代码 基本块划分 相邻入口中间的代码序列(仅含前一入口)某入口到程序的停止语句代码之间的代码序列 流图:由基本块按控制流方向形成的有向图基本块内优化,主要有:常量传播、合并和公共子表达式删除 复写传播与死代码(无用代码)删除,代码优化的种类全局优化,基本块间优化基本块间控制流与数据流分析技术优化措施主要有:循环优化:80/20 规则 不变式外提、归纳变量删除、强度消弱等 公共子表达式删除 常量传播、合并常量、复写传播 死代码(无用赋值)删除,典型的优化编译器的组织,中间表示,中间表示,优化举例,快速排序程序片段如下,i=m 1;j=n;v=an;while(1)do i=i+1;while(aiv);if(i=j)break;x=ai;ai=aj;aj=x;x=ai;ai=an;an=x;,/B1(1)i:=m 1(2)j:=n(3)t1:=4*n(4)v:=at1,优化举例,快速排序程序片段如下,i=m 1;j=n;v=an;while(1)do i=i+1;while(aiv);if(i=j)break;x=ai;ai=aj;aj=x;x=ai;ai=an;an=x;,/B2(5)i:=i+1(6)t2:=4*i(7)t3:=at2(8)if t3 v goto(5),优化举例,快速排序程序片段如下,i=m 1;j=n;v=an;while(1)do i=i+1;while(aiv);if(i=j)break;x=ai;ai=aj;aj=x;x=ai;ai=an;an=x;,/B3(9)j:=j 1(10)t4:=4*j(11)t5:=at4(12)if t5 v goto(9),优化举例,快速排序程序片段如下,i=m 1;j=n;v=an;while(1)do i=i+1;while(aiv);if(i=j)break;x=ai;ai=aj;aj=x;x=ai;ai=an;an=x;,/B4(13)if i=j goto(23),优化举例,快速排序程序片段如下,i=m 1;j=n;v=an;while(1)do i=i+1;while(aiv);if(i=j)break;x=ai;ai=aj;aj=x;x=ai;ai=an;an=x;,/B5(14)t6:=4*i(15)x:=at6(16)t7:=4*i(17)t8:=4*j(18)t9:=at8(19)at7:=t9(20)t10:=4*j(21)at10:=x(22)goto(5),优化举例,快速排序程序片段如下,i=m 1;j=n;v=an;while(1)do i=i+1;while(aiv);if(i=j)break;x=ai;ai=aj;aj=x;x=ai;ai=an;an=x;,/B6(23)t11:=4*i(24)x:=at11(25)t12:=4*i(26)t13:=4*n(27)t14:=at13(28)at12:=t14(29)t15:=4*n(30)at15:=x,优化举例流图,优化举例,公共子表达式删除基本块内,t6:=4*ix:=at6t7:=4*i t8:=4*jt9:=at8at7:=t9t10:=4*jat10:=xgoto B2,B5,B6,t11:=4*ix:=at11t12:=4*i t13:=4*nt14:=at13at12:=t14t15:=4*n at15:=x,变换,优化举例,公共子表达式删除基本块内,t6:=4*ix:=at6t8:=4*jt9:=at8at6:=t9at8:=xgoto B2,B5,B6,t11:=4*ix:=at11t13:=4*nt14:=at13at11:=t14at13:=x,优化举例,公共子表达式删除基本块间 t2:=4*i:B2-B5 t2:=4*i:B2-B6 t4:=4*j:B3-B5 t1:=4*n:B1-B6,t6:=4*ix:=at6t8:=4*jt9:=at8at6:=t9at8:=xgoto B2,B5,B6,t11:=4*ix:=at11t13:=4*nt14:=at13at11:=t14at13:=x,变换,优化举例,公共子表达式删除基本块间 t3:=at2:B2-B5 t3:=at2:B2-B6 t5:=at4:B3-B5,x:=at2t9:=at4at2:=t9at4:=xgoto B2,B5,B6,x:=at2t14:=at1at2:=t14at1:=x,变换,优化举例,公共子表达式删除基本块间B1中 v:=at1 能否作为公共子表达式?,x:=t3at2:=t5at4:=xgoto B2,B5,B6,x:=t3t14:=at1at2:=t14at1:=x,优化举例,复写传播 形成为f:=g的赋值叫做复写语句 优化过程中会大量引入复写 复写传播变换是在复写语句f:=g后,尽可能用g代表f(暗示有前提条件)复写传播变换带来 常量合并 死代码删除,x:=t3/可以考虑删除at2:=t5at4:=t3goto B2,x:=t3at2:=t5at4:=xgoto B2,优化举例,复写传播,B5,B5,x:=t3/可以考虑删除t14:=at1at2:=t14at1:=t3,优化举例,复写传播,B6,B6,x:=t3t14:=at1at2:=t14at1:=x,B6中,t14:=at1 可以复写传播吗?,优化举例,循环优化 代码外提 归纳变量删除 强度削弱例:while(i=limit 2)变换成t=limit 2;/为什么提出循环?while(i=t),优化举例,强度削弱和归纳变量删除j和t4的值步伐一致地变化这样的变量叫做归纳变量在循环中有多个归纳变量时,也许只需要留下一个这个操作由归纳变量删除 过程来完成,优化举例,j:=j 1t4:=4*jt5:=at4if t5 v goto B3,B3,除第一次外,t4=4*j在B3的入口一定保持在j:=j 1后,关系t4=4*j+4也保持,优化举例,2023/4/26,编译原理与技术之代码优化,30,代码优化(续),循环优化简介,2023/4/26,编译原理与技术之代码优化,31,流图中的循环,循环定义 程序流图中有唯一入口的强连通子图必经结点(集合)d DOM n 表示结点d是结点n的必经结点,如果从流图的开始结点出发到达结点n的每条路径上必须经过结点d。回边 n-d,如果d DOM n。,2023/4/26,编译原理与技术之代码优化,32,流图中的循环,自然循环 由回边 n-d 确定的循环Loop(n-d)Loop(n-d)=d U 流图中所有不经过结点 d 而能达到结点 n 的其它结点可归约流图 去除流图中的回边后的子图是无环有向图 结构化程序流图是可归约的 存在不可归约流图,2023/4/26,编译原理与技术之代码优化,33,流图中的循环,1,2,3,4,5,6,7,8,9,10,e.g.右边流图的必经结点树,e.g.一个流图,2023/4/26,编译原理与技术之代码优化,34,流图中的循环,自然循环回边10 7 循环7,8,10回边7 4 循环4,5,6,7,8,10回边4 3和8 3 循环3,4,5,6,7,8,10回边9 11,2,3,4,5,6,7,8,9,10,e.g.一个流图,2023/4/26,编译原理与技术之代码优化,35,循环优化,代码外提 循环不变计算 前置结点,2023/4/26,编译原理与技术之代码优化,36,循环优化代码外提,寻找循环不变计算(1)标记循环各结点(基本块)中的语句x:=y+z为不变计算,如果y和z均为常量或定值点在循环外(ud链);(2)检查其余语句,如 w:=x+u,如果x和u均为常量或定值点在循环外,或其唯一能达到的定值点已标记,如(1)中的x,则标记该语句;(3)重复(2)直至没有语句被标记为不变计算为止。,2023/4/26,编译原理与技术之代码优化,37,循环优化代码外提,如何实施代码外提?考察已标记的循环不变计算,P:x:=y+z,如果满足,(1)P点所在基本块是所有循环出口结点的必经结点;(2)x 在循环中没有其它定值点;(3)循环中对 x 的引用均来自 P 点的定值。问题:如果 P 点定值满足(2)和(3),而不满足(1),能否外提该代码?,2023/4/26,编译原理与技术之代码优化,38,循环优化代码外提,非法代码外提case 1,代码外提,i:=1,B1,if u v goto B3,B2,u:=u+1,B3,v:=v-1if v=20 goto B5,B4,j:=i,B5,i:=2,B6,j:我要1,2023/4/26,编译原理与技术之代码优化,39,循环优化代码外提,非法代码外提case 2,B2,代码外提,j:2呢?,我要外提?,2023/4/26,编译原理与技术之代码优化,40,循环优化代码外提,非法代码外提case 3,i:=1,B1,i:=3if u v goto B3,i:=2/外提u:=u+1,B3,k:=iv:=v-1if v=20 goto B5,B4,j:=i,B5,i,你从哪里来?,2023/4/26,编译原理与技术之代码优化,41,循环优化,归纳变量 基本归纳变量 i:(i,1,0),循环中有唯一定值,形如 i:=i+n,n 为常量。i 族归纳变量 j:(i,c,d),如果循环中变量 j 的唯一定值满足 j:=i*c d,c和d为循环不变量。更多的i 族归纳变量 k,k 的定值形式为:k:=j*b,k:=b*j,k:=j/b,k:=j+b,k:=b+j,b 为循环不变量,j 为 i 族归纳变量(i,c,d),则 k 亦为i 族归纳变量。,2023/4/26,编译原理与技术之代码优化,42,循环优化,强度消弱 i 族归纳变量 j:(i,c,d),j:=i*c+d;引入新变量 s,在循环前置块末尾添加如下语句:s:=c*i0/if c=1 then s:=i0 s:=s+d/if d=0 then no code 变量 j 的定值语句变为 j:=s;在基本归纳变量 i 定值语句,i:=i n 后添加语句s:=s+c*n;s 也是i 族归纳变量 s:(i,c,d),2023/4/26,编译原理与技术之代码优化,43,循环优化,删除归纳变量 如果基本归纳变量 i,循环出口后不活跃,在循环中除了递归赋值外,仅出现在若干条件测试语句中,如 if i op x goto L 等,则可以考虑删除此基本归纳变量。选择 i 族归纳变量 j:(i,c,d),用以下语句序列,s:=c*x;s:=s+d;if j op s goto L 替代 if i op x goto L 删除语句 i:=i+n,2023/4/26,编译原理与技术之代码优化,44,循环优化举例,e.g.对以下伪C程序片段进行有关循环优化int A100100100;for(i 0;i100;i+)for(j=0;j100;j+)for(k=0;k100;k+)A i j k i*j*k;,2023/4/26,编译原理与技术之代码优化,45,循环优化举例代码外提,for(i 0;i100;i+)for(j=0;j100;j+)for(k=0;k100;k+)A i j k i*j*k;,对于最内层循环k而言,为循环不变计算,2023/4/26,编译原理与技术之代码优化,46,循环优化举例代码外提,for(i 0;i100;i+)for(j=0;j100;j+)t1=addr(A i j);t2=i*j;for(k=0;k100;k+)t1 k t2*k;/Loop j,A i 在循环j中保持“不变”,2023/4/26,编译原理与技术之代码优化,47,循环优化举例代码外提,for(i 0;i100;i+)t3=addr(A i);for(j=0;j100;j+)t1=addr(t3 j);t2=i*j;for(k=0;k100;k+)t1 k t2*k;/Loop j/Loop i,归纳表达式(变量),2023/4/26,编译原理与技术之代码优化,48,循环优化举例强度消弱,for(i 0;i100;i+)t3=addr(A i);t4=0;/i*j 的初值for(j=0;j100;j+)t1=addr(t3 j);t2=t4;t5=0;/t2*k 的初值for(k=0;k100;k+)t1 k t5;t5=t5+t2;/Loop kt4=t4+i;/Loop j/Loop i,利用复写传播,删除t2,2023/4/26,编译原理与技术之代码优化,49,循环优化举例强度消弱,上述程序中隐含的有价值的归纳表达式:addr(A i)可以表示为:A+i*40000,A 为数组开始地址addr(t3 j)可以表示为:t3+j*400t1 k 的地址表示为:t1+k*4,2023/4/26,编译原理与技术之代码优化,50,循环优化举例强度消弱,t6=A;/A+i*40000的初值for(i 0;i100;i+)t3=t6;t4=0;t7=t3;/t3+j*400 的初值for(j=0;j100;j+)t1=t7;t5=0;t8=t1;/t1+k*4 的初值;for(k=0;k100;k+)*t8=t5;t5=t5+t4;t8=t8+4;/Loop kt4=t4+i;t7=t7+400;/Loop jt6=t6+40000;/Loop i,应用复写传播,再次删除t3和 t1;,2023/4/26,编译原理与技术之代码优化,51,循环优化举例强度消弱,t6=A;/A+i*40000的初值for(i 0;i100;i+)t4=0;t7=t6;for(j=0;j100;j+)t5=0;t8=t7;for(k=0;k100;k+)*t8=t5;t5=t5+t4;t8=t8+4;/Loop kt4=t4+i;t7=t7+400;/Loop jt6=t6+40000;/Loop i,结果最优了?,

    注意事项

    本文(编译原理 代码优化.ppt)为本站会员(laozhun)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开