基于dag的基本块优化参考

基于DAG的基本块优化1.实验目的与任务了解基本块的DAG表示及其应用,掌握局部优化的基本方法。2.实验要求设计一个转换程序,把由四元式序列表示的基本块转换为DAG,并在构造DAG的过程中,进行合并已知量、删除无用赋值及删除公共子表达式等局部优化处理。最后再从所得到的DAG出发,按原来生成DAG各个结点的顺序,重建四元式序列形式的基本块。3.实验内容(1)DAG的结点类型只考虑0型、1型和2型,如下表所示。类型四元式DAG结点0型(=,B, ,A) ①AB1型(op,B, ,A)② op①2型(op,B,C,A)(=[ ],B,C,A)(jrop,B,C,A)(2)由基本块构造DAG算法如下:while(基本块中还有未处理过的四元式) {取下一个四元式Q;newleft=newright=0;if(getnode(B)= =NULL){makeleaf(B);newleft=1;} switch(Q的类型){case 0 :n= getnode(B);insertidset(n,A);break;case 1: if(isconsnode(B)){p=calcons(Q.op,B);if(newleft= =1) /* getnode(B)是处理Q时新建结点 */delnode(B);if((n=getnode(p))= =NULL){makeleaf(p);n=getnode(p);}}else{if((n=findnode(Q.op,B))= =NULL)n=makenode(Q.op,B);}insertidset(n,A);break;case 2: if(getnode(C)= =NULL){makeleaf(C);newright=1;}if(isconsnode(B) && isconsnode(C)){p=calcons(Q.op,B,C);if(newleft==1) /* getnode(B)是处理Q时新建结点 */delnode(B);if(newright==1) /* getnode(C)是处理Q时新建结点 */delnode(C);if((n=getnode(p))= =NULL){makeleaf(p);n=getnode(p);}}else{if((n=findnode(Q.op,B,C))= =NULL)n=makenode(Q.op,B,C);}insertidset(n,A);break;}}}上述算法中应设置如下的函数:getnode(B):返回B(可以是标记或附加信息)在当前DAG中对应的结点号。makeleaf(B):构造标记为B的叶子结点。isconsnode(B):检查B对应的结点是否为标记为常数的叶子结点。calcons(Q.op,B):计算op B 的值(即合并已知量)。它的另一种调用形式是calcons(Q.op,B,C):计算B op C 的值。delnode(B):删除B(结点的标记)在当前DAG中对应的结点。findnode(Q.op,B):在当前DAG中查找并返回这样的结点:标记为op,后继为getnode(B)(即查找公共子表达式op B)。它的另一种调用形式是findnode (Q.op,B,C) (即查找公共子表达式B op C)。makenode(Q.op,B,C):构造并返回标记为op,左右后继分别为getnode(B)、getnode(C)的内部结点。insertidset(n,A):若getnode(A)=NULL,则把A附加到结点n;否则,若A在getnode(A)的附加标识符集中,且getnode(A)无前驱或虽有前驱但getnode(A) 附加标识符集中符号数大于1,则把A从getnode(A)的附加标识符集中删除(即删除无用赋值)。请实现上述基本块的DAG构造算法,并添加从所得DAG按原来生成DAG各个结点的顺序,重建四元式序列的功能。(3)测试用例用下面的基本块作为输入:(1) T1 = A * B(2) T2 = 3 / 2(3) T3 = T1 ― T2(4) X = T3 (5) C = 5(6) T4 = A * B(7) C = 2(8) T5 = 18 + C(9) T6 = T4 * T5(10) Y = T6基本块的DAG如下:按生成DAG各个结点的顺序,重建四元式序列如下:(1) T1 = A * B(2) T2 = 1.5(3) T3 = T1 ― 1.5(4) X = T3 (5) T4 = T1(6) C = 2(7) T5 = 20(8) T6 = T1 * 20(9) Y = T6Code.txt文件内容T1 = A * BT2 = 3 / 2T3

C语言基于dag的基本块优化,基于dag的基本块优化参考.docx相关推荐

  1. 在英特尔® 架构平台上开发和优化基于 NDK 的 Android 游戏应用

    作者:杜伟 Android 原生开发套件 (NDK) 是 Android SDK 的附带工具.借助该工具,您可以使用诸如 C 和 C++ 等本地代码语言实现部分应用. 您可以从以下网址下载该 NDK ...

  2. 基于SIMD的AVS整数反变换算法设计与优化

    基于SIMD 的AVS 整数反变换算法设计与 优化 王玲娟,张刚** 作者简介:王玲娟,(1987-),女,在读硕士,主要研究方向:视频解码算法 通信联系人:张刚,(1953-),男,教授,主要研究方 ...

  3. 数据驱动应用(三):异构数据服务(基于有向无环图DAG)

    概述 主要概念 数据服务(Data Service):对异构数据源,基于有向无环图,提供异构数据的查询和推送能力. 指标:用于衡量事物发展程度的单位或方法,它还有个IT上常用的名字,也就是度量.例如: ...

  4. R语言构建混淆矩阵(仿真数据)并基于混淆矩阵(confusion matrix)计算并计算Accuracy、Precision、Recall(sensitivity)、F1、Specificity指标

    R语言构建混淆矩阵(仿真数据)并基于混淆矩阵(confusion matrix)计算并计算Accuracy.Precision.Recall(sensitivity).F1.Specificity指标 ...

  5. R语言泊松回归(poisson)模型案例:基于robust包的Breslow癫痫数据集

    R语言泊松回归(poisson)模型案例:基于robust包的Breslow癫痫数据集 目录 R语言泊松回归(poisson)模型案例:基于robust包的Breslow癫痫数据集 #数据加载

  6. R语言数据热力图绘制实战(基于原生R函数、ggplot2包、plotly包)

    R语言数据热力图绘制实战(基于原生R函数.ggplot2包.plotly包) 目录 R语言数据热力图绘制实战(基于原生R函数.ggplot2包.plotly包)

  7. 多目标优化算法_【实验室论文】基于多种群协同演化的约束多目标优化算法

    欢迎关注智能优化与学习实验室 在很多实际问题中,例如科学.工程设计等领域,衡量一个方案的好坏难以用一个指标来判断,需要用多个目标来刻画,且实际问题通常带有约束条件,这类问题被称为约束多目标优化问题,高 ...

  8. 来个硬货——长文解读:基于业务场景的MySQL千万级大表优化

    千万级大表如何优化,这是一个很有技术含量的问题,通常我们的直觉思维都会跳转到拆分或者数据分区,在此我想做一些补充和梳理,想和大家做一些这方面的经验总结,也欢迎大家提出建议. 从一开始脑海里开始也是火光 ...

  9. c语言排序算法 应用与实现,基于C语言排序算法改进与应用.doc

    基于C语言排序算法改进与应用 基于C语言排序算法改进与应用 摘 要:介绍了程序语言中排序的原理及应用,阐述了基于C语言的三种主要排序方法,提出了每种排序方法的改进,计算出改进后算法的时间复杂度,编写了 ...

最新文章

  1. 使用jQuery清空表单
  2. 华为Mate30与大疆手机云台3_更便捷更从容,大疆DJI OM 4手机云台使用体验
  3. word2vec实例详解python_在python下实现word2vec词向量训练与加载实例
  4. 需要某个字体包才能正确显示此页面_[三分钟小文]前端性能优化-页面加载速度优化...
  5. 里式替换(LSP)跟多态有何区别?
  6. Ant in Action读书笔记(一):Ant里的Property是immutable的
  7. 研发中,问题以界面开发人员为解决负责人
  8. 系统地编译Hi3519过程及其处理问题思路
  9. erp服务器慢_ERP系统服务器维护经验谈
  10. ctf misc 图片题知识点
  11. 华为云计算hcip证书有效期_华为云计算容器HCIP V1.0认证
  12. SQLite3 Cpp基本使用
  13. 文件夹或文件的隐藏和加密20201024
  14. 自然语言处理5:jieba分词详解全模式,精确模式和搜索引擎模式
  15. BOTTON控件介绍及程序基本框架与皮肤自定义
  16. cold diffusion的个人理解
  17. 分三种情况C语言编程,浅谈C语言教学的现状及几点建议.doc
  18. 人脑与计算机之间有什么联系,电脑和人脑有什么不同
  19. 北京软件项目外包流程及管理
  20. Linux 音频驱动(一) ASoC音频框架简介

热门文章

  1. 你有把依赖注入玩坏?
  2. .NET架构小技巧(5)——反射,架构人员法宝III
  3. ASP.NET Core 3.x启动时运行异步任务(一)
  4. 后端开发都应该了解点接口的压力测试(Apache Bench版)
  5. 一文带你了解如何打造持续学习文化
  6. 居然不知道和的区别?
  7. .NET Core 3.0 新 JSON API - Utf8JsonWriter
  8. 你跟最伟大领导的距离,或许只差这一点
  9. 从严治码-系统集成项目之根本
  10. 关于.NET Core是否应该支持WCF Hosting的争论