C语言基于dag的基本块优化,基于dag的基本块优化参考.docx
基于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相关推荐
- 在英特尔® 架构平台上开发和优化基于 NDK 的 Android 游戏应用
作者:杜伟 Android 原生开发套件 (NDK) 是 Android SDK 的附带工具.借助该工具,您可以使用诸如 C 和 C++ 等本地代码语言实现部分应用. 您可以从以下网址下载该 NDK ...
- 基于SIMD的AVS整数反变换算法设计与优化
基于SIMD 的AVS 整数反变换算法设计与 优化 王玲娟,张刚** 作者简介:王玲娟,(1987-),女,在读硕士,主要研究方向:视频解码算法 通信联系人:张刚,(1953-),男,教授,主要研究方 ...
- 数据驱动应用(三):异构数据服务(基于有向无环图DAG)
概述 主要概念 数据服务(Data Service):对异构数据源,基于有向无环图,提供异构数据的查询和推送能力. 指标:用于衡量事物发展程度的单位或方法,它还有个IT上常用的名字,也就是度量.例如: ...
- R语言构建混淆矩阵(仿真数据)并基于混淆矩阵(confusion matrix)计算并计算Accuracy、Precision、Recall(sensitivity)、F1、Specificity指标
R语言构建混淆矩阵(仿真数据)并基于混淆矩阵(confusion matrix)计算并计算Accuracy.Precision.Recall(sensitivity).F1.Specificity指标 ...
- R语言泊松回归(poisson)模型案例:基于robust包的Breslow癫痫数据集
R语言泊松回归(poisson)模型案例:基于robust包的Breslow癫痫数据集 目录 R语言泊松回归(poisson)模型案例:基于robust包的Breslow癫痫数据集 #数据加载
- R语言数据热力图绘制实战(基于原生R函数、ggplot2包、plotly包)
R语言数据热力图绘制实战(基于原生R函数.ggplot2包.plotly包) 目录 R语言数据热力图绘制实战(基于原生R函数.ggplot2包.plotly包)
- 多目标优化算法_【实验室论文】基于多种群协同演化的约束多目标优化算法
欢迎关注智能优化与学习实验室 在很多实际问题中,例如科学.工程设计等领域,衡量一个方案的好坏难以用一个指标来判断,需要用多个目标来刻画,且实际问题通常带有约束条件,这类问题被称为约束多目标优化问题,高 ...
- 来个硬货——长文解读:基于业务场景的MySQL千万级大表优化
千万级大表如何优化,这是一个很有技术含量的问题,通常我们的直觉思维都会跳转到拆分或者数据分区,在此我想做一些补充和梳理,想和大家做一些这方面的经验总结,也欢迎大家提出建议. 从一开始脑海里开始也是火光 ...
- c语言排序算法 应用与实现,基于C语言排序算法改进与应用.doc
基于C语言排序算法改进与应用 基于C语言排序算法改进与应用 摘 要:介绍了程序语言中排序的原理及应用,阐述了基于C语言的三种主要排序方法,提出了每种排序方法的改进,计算出改进后算法的时间复杂度,编写了 ...
最新文章
- 使用jQuery清空表单
- 华为Mate30与大疆手机云台3_更便捷更从容,大疆DJI OM 4手机云台使用体验
- word2vec实例详解python_在python下实现word2vec词向量训练与加载实例
- 需要某个字体包才能正确显示此页面_[三分钟小文]前端性能优化-页面加载速度优化...
- 里式替换(LSP)跟多态有何区别?
- Ant in Action读书笔记(一):Ant里的Property是immutable的
- 研发中,问题以界面开发人员为解决负责人
- 系统地编译Hi3519过程及其处理问题思路
- erp服务器慢_ERP系统服务器维护经验谈
- ctf misc 图片题知识点
- 华为云计算hcip证书有效期_华为云计算容器HCIP V1.0认证
- SQLite3 Cpp基本使用
- 文件夹或文件的隐藏和加密20201024
- 自然语言处理5:jieba分词详解全模式,精确模式和搜索引擎模式
- BOTTON控件介绍及程序基本框架与皮肤自定义
- cold diffusion的个人理解
- 分三种情况C语言编程,浅谈C语言教学的现状及几点建议.doc
- 人脑与计算机之间有什么联系,电脑和人脑有什么不同
- 北京软件项目外包流程及管理
- Linux 音频驱动(一) ASoC音频框架简介