- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编译原理 机器无关优化 授课:胡静 编译器的结构 引言 如果简单的把每个高级语言结构独立的翻译成机器代码,那么会带来相当大的运行时刻的开销。本章讨论如何消除这样的低效率因素——代码改进(代码优化) 在目标代码中消除不必要的指令 把一个指令序列替换为一个完成相同功能的较快的指令序列 上部分讲述了局部代码优化的问题,本部分主要简述全局优化问题。 考虑在多个基本块之间发生的事情。 本章基础 大部分全局优化是基于数据流分析(data-flow analyze)技术实现的。 数据流分析技术是一组用以收集程序相关信息的算法。 所有数据流分析的结果都具有相同的形式:对于程序中的每个指令,它们描述了该指令每次执行时必然成立的一些性质 不同性质的分析方法各不相同,比如,对于常量传播分析而言,要判断在程序的每个点上,程序使用的各个变量是否在该点上具有唯一的常量值。 活跃性分析确定在程序的每个点上,在某个变量中存放的值是否一定会在被读取之前被覆盖掉,如果是,我们就不需要在寄存器或内存位置上保留这个值。 本章结构 1、讨论一些主要的代码改进机会 2、介绍数据流分析技术 说明如何使用在全局内收集的信息来改进代码 3、介绍数据流框架的总体思想 上部分中的数据流分析是这个框架的特例 4、总体框架的例子,功能强大 5、“部分冗余消除”的技术,用于优化程序中各个表达式求值的位置。 6、讨论程序中循环的发现和分析 7、在对循环进行识别的基础上,介绍一个用来解决数据流问题的算法族 8、使用层次化分析来消除归纳变量(用来对循环的迭代次数进行计数的变量) 1、优化的主要来源 优化最基本的原则:必须保持源程序的语义。 编译器不可能完全理解一段程序的语义,并将其替换为一个全然不同而更加高效的等价程序。编译器只能利用一些相对低层的语义转换 使用常见的性质:i+0=i,或者一些程序语义(如在同样的值上进行同样的运算必然得到同样的结果) 1.1、冗余的原因 源程序编写过程中出现的冗余 重新计算某些结果更加方便和直接 高级程序设计语言的副产品 例如数组访问。多次引用对某一个数组的访问,可能存在很多重复的计算。 高级程序设计语言屏蔽了低层具体的计算细节——程序容易书写、理解和演化 利用编译器来消除这些冗余,使程序获得高效——高级程序设计语言屏蔽的底层细节已知。 1.2、本章会用到的一个例子 void quicksort(int m, int n) { int i, j; int v, x; if(n =m) return; i= m-1;j=n; v=a[n]; while(1) { do i = j+1; while(a[i]v); do j = j-1; while(a[j]v); if(i = j) break; x=a[i]; a[i]=a[j]; a[j]=x; } x=a[i]; a[i]=a[j]; a[j]=x; quicksort(m,j);quicksort(i+1, n) } 1.2、本章会用到的一个例子 例子中对地址的计算首先必须要被分解为低层次的算术运算,暴露出冗余之处。 假设中间表达式的结果都由临时变量来存放,并假设整数占用4个字节 赋值运算x=a[i]的三地址语句 t6=4*i x=a[t6] 每个数组访问都被翻译成一对语句,一个乘法和一个数组下标运算 1.2、本章会用到的一个例子 (1) i = m -1 (2) j = n (3) t1 = 4*n (4) v=a[t1] (5) i=i+1 (6) t2=4*i (7) t3=a[t2] (8) if t3v goto (5) (9) j=j-1 (10) t4=4*j (11) t5=a[t4] (12) if t5v goto(9) (13) if i=j goto (23) (14) t6=4*i (15) x=a[t6] 1.2、本章会用到的一个例子 1.3、保持语义不变的转换 编译器可以使用多种方法改进程序,并保持语义不变 公共子表达式消除 复制传播 死代码消除 常量折叠 如右图所示,在这个块内,对 4*i和4*j进行了重复计算,虽然这些计算不是程序员显式要求的。 1.4、全局公共子表达式 如果表达式E在某次出现之前已经被计算过了,并且E中的变量的值从那次计算之后就一直没有被改变,那么E的该次出现就称为一个公共子表达式。 局部公共子表达式的消除: 1.5、复制传播 形如u=v这样的语句叫做复制语句,简称复制。这样的语句可以进一步的优化。 1.5、复制传播 在复制语句u=v之后尽可能的用v来代替u。 1.6、死代码消除 如果一个变量在某个程序点上的值可能会在以后被使用,那么我们就
您可能关注的文档
- 史上最全各类主持稿件(艺考必备、新闻主持、娱乐节目主持等)_副本.doc
- 锅里有了碗里才会有教材.doc
- 循环流化床锅炉烘炉和试运行方案.doc
- 申荷永老师访谈(三修)-附件.doc
- 菜油市场情况与行情分析.doc
- 丙型肝炎病毒核心抗原检测技术国内外临床研究应用情况详解.doc
- 加砌块合同样本.doc
- 家具_沙发_皮料中英文对照.doc
- 护理学8,9篇节测试.doc
- 论文-葡聚糖060827要点.doc
- 2025年无人机低空医疗物资投放社会效益报告.docx
- 2025年再生塑料行业包装回收利用产业链重构研究.docx
- 《AI眼镜周边产品市场机遇:2025年终端销售与需求增长洞察》.docx
- 2025年坚果加工行业深加工技术突破与市场拓展策略报告.docx
- 2025年通信芯片行业技术竞争与未来趋势报告.docx
- 《2025年生鲜电商配送冷链事故分析与预防措施》.docx
- 《商业航天融资新趋势2025民营卫星企业资本涌入估值分析市场动态》.docx
- 2025年能源绿色健康行业创新技术与市场应用报告.docx
- 2025年无人机低空医疗救援通信方案分析报告.docx
- 2025年烹饪机器人行业市场集中度分析报告.docx
原创力文档


文档评论(0)