数据流分析之WorkList Algorithm
目录
(1)如何求解数据流方程?
(2)WorkList Algorithm
(1)如何求解数据流方程?
不论是Reaching Definition Analysis中对可达定义集合的求解,还是Liveness Analysis中对活跃变量集合的求解,本质上都是在解方程。
以RDA举例,其数据流方程如下:
可认为每个指令都对应方程中的两个变量,即IN(p)和OUT(p)。为了减少变量个数,把(1)式带入(2)式,以去掉IN(p):
此时方程中的变量为,而和则属于常数,因为其值随着指令的确定而相应确定。
此外,方程还有一个初值,即,
转化为OUT,
为了说明求解思路,先用更简化的符号来表示上述方程:
通过此方程可以看出,数据流方程的一个重要特点就是,待求的每个未知数既是若干方程的自变量,也是某个方程的因变量。
从此特点出发,我们很快发现一种求解的思路,即先给定一组未知数的初始值如,接着将这组值带入上述方程,得到又一组未知数的值,如果与相等,则说明找到了一组方程的解,因为这组值可让上述方程成立。如果与不相等,则重复上述过程,一定能找出方程的一组解。原因如下:
对于RDA,自变量越大(即集合的基数越大),根据方程,其因变量也相应越大。
由此可知,上述方程中的函数都是单调不减的,即如果,则有
,即
要让解集合随着迭代的进行而越来越大(即集合的基数越大),还需要一个初始条件,即
如果令,则有
此时初始条件和函数单调性共同作用,有如下链式反应:
由于是离散值(集合)且有上界(集合元素有上限),因此上述链式反应一定会终止,终止时会有
,这即为方程的一组解。
(2)WorkList Algorithm
上述思路对应的算法为Round-Robin Iterations,即各未知数的迭代次数(or更新次数)保持同步,即算法每次循环结束后都有
,而WorkList Algorithm则不同,其未知数的迭代次数不一定同步,在算法每次循环结束后可能会出现
,这说明针对未知数的值的更新,WorkList Algorithm有一套优先级规则。(其实这两种更新思路与数值分析中求解线性方程组的Jacobi迭代和Gauss-Seidel迭代有共通之处)
先给出WorkList Algorithm的(不规范的)伪代码:
WorkList()for i <- 1 to n doy[i] <- { } //初始化随具体情况而定w <- [ y[1] y[2] ... y[n] ] //将未知数放入worklist中while(!is_empty(w)) do y[i] <- extract(w) //从worklist以某种方式抽出一个未知数old <- y[i] //记录此未知数的值y[i] <- f_i(y[1], y[2], ..., y[n]) //挑出以此未知数作为因变量的方程,并进行运算,结果赋给此未知数if old != y[i] then //如果未知数的值在运算后发生变化for y[k] <- dep(y[i]) do //将依赖它的那些未知数放入worklist中,a依赖b的含义是//以a为因变量的方程使用b作为自变量,因此当b发生变化,a也就可能发生变化//故把a放入worklist中w <- insert(w, y[k])
未完待续
数据流分析之WorkList Algorithm相关推荐
- 静态程序分析chapter4 - 基于格(Lattice)理论的数据流分析
文章目录 三. 格理论 函数不动点 偏序(Partial Order) 上界和下界 最小上界和最大下界 glb 和 lub的属性 格(lattice).半格.完备格.乘积格 数据流分析框架 单调性和不 ...
- Day 4 Data Flow Analysis-Foundations
视频地址 南京大学<软件分析>课程05(Data Flow Analysis - Foundations I) 南京大学<软件分析>课程06(Data Flow Analysi ...
- 软件分析——数据流分析2
数据流分析的理论部分(foundation) 这一部分李越老师用了两课时(第五课 ,第六课 ),讲的很仔细,将一些比较抽象的概念也解释的很清楚,收获很多,顺便做了笔记和一点从自己角度的理解,将比窘上传 ...
- 编译器设计(十)——数据流分析
文章目录 一.概述 二.迭代数据流分析 2.1 支配性 2.2 活跃变量分析 2.3 数据流分析的局限性 2.4 其他数据流问题 2.4.1 可用表达式 2.4.2 可达定义 2.4.3 可预测表达式 ...
- HMM——维特比算法(Viterbi algorithm)
1. 前言 维特比算法针对HMM第三个问题,即解码或者预测问题,寻找最可能的隐藏状态序列: 对于一个特殊的隐马尔可夫模型(HMM)及一个相应的观察序列,找到生成此序列最可能的隐藏状态序列. 也就是说给 ...
- LLVM数据流分析的理论
LLVM数据流分析的理论 标量优化(scalar目录): 死代码消除(BDCE.cpp[code],ADCE.cpp[code],DCE.cpp[code]), 全局值编号(GVN.cpp[code] ...
- 《OpenCV3编程入门》学习笔记8 图像轮廓与图像分割修复(五)分水岭算法(watershed algorithm)
8.5 分水岭算法(watershed algorithm) 1.基于拓扑理论的数学形态学的分割方法. 2.基本思想:把图像看作测地学上的拓扑地貌,图像中每一点像素的灰度值表示该点的海拔高度,每一个局 ...
- 国内android应用商城中程序隐私泄露分析,基于数据流分析的Android应用隐私泄露检测研究...
摘要: 随着技术的进步,智能手机给人们的生活带来了极大的便利.据统计,搭载Android智能系统的手机现如今已经占据了 81%的手机市场份额,这也正让安卓系统成为了攻击者窃取用户隐私数据的一个重要目标 ...
- C++ algorithm的sort函数总结
sort函数 sort对给定区间进行排序,支持各种数据类型,迭代器,结构体,自定义排序规则 stable_sort 对给定区间进行稳定排序,且可保证相等元素的原本相对次序在排序后保持不变 partia ...
- SLAM之特征匹配(三)————RANSAC------LO-RANSAC Algorithm
matlab 编译loransac,lapack mex ranH.c时一直链接错误. 原来mex在编译多个文件时要把所有的C文件都列出来.命令如下: mex loransacH.mex.c ranH ...
最新文章
- mySql中使用命令行建表基本操作
- 局部图像描述子——Harris角点检测器
- js,jquery获取页面元素距离浏览器工作区顶端的距离
- Django和Ajax
- 人生的主干,提及程序化
- 中关村-DIY高清之HDMI线导购
- 25个优秀的设计机构网站设计案例
- adb 重命名_adb中常用的命令
- 小学生通用计算机在线使用,Win7电脑可以使用一起小学软件的方法
- Spring JdbcTemplate 模板剖析 之 常用 增删改查
- 全球搜索引擎集合(主要有移动搜索APP的)
- 51单片机蜂鸣器演奏《小苹果》C语言程序,C利用51单片机蜂鸣器演奏音乐
- 最速下降法解析(理解笔记)
- 计算机一级考excel基础知识,计算机一级考试模拟题(word、excel、ppt以及基础知识)...
- 2021年信息系统监理师考试大纲
- b站用户年龄段占比_用户和电商变现上,微博、小红书、B站差别在哪里?
- 两代 2011/2014 Mac Mini 硬盘SSD性能提升研究。(SSD固态硬盘研究)
- SpringBoot整合screw生成数据库文档
- 【2022修复版】社群扫码进群活码引流完整运营源码/带视频搭建教程
- HTML+CSS一个简单的电影网页制作作业,学生个人html静态网页制作成品代码, html电影速递网
热门文章
- BP神经网络学习总结
- Restorator 导致win8或win8.1 打开程序提示不支持此接口的解决方法
- SAI钢笔工具如何使用,入门篇
- usbcan、can分析仪、can卡的产品特点和功能特点
- USBCAN分析仪的配套CAN和CANFD综合测试软件LKMaster软件解决工程师CAN总线测试难题
- Spug发布前端项目实战全过程
- 极限学习机(Extreme Learning Machine,ELM)详解
- 解决华为手机用rem单位,内容超出屏幕宽度问题
- 武汉大学2020年大学生程序设计大赛决赛(重现赛)J (oeis or 卡特兰数+可重集排列数)
- bootdo框架首页解析