目录

(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相关推荐

  1. 静态程序分析chapter4 - 基于格(Lattice)理论的数据流分析

    文章目录 三. 格理论 函数不动点 偏序(Partial Order) 上界和下界 最小上界和最大下界 glb 和 lub的属性 格(lattice).半格.完备格.乘积格 数据流分析框架 单调性和不 ...

  2. Day 4 Data Flow Analysis-Foundations

    视频地址 南京大学<软件分析>课程05(Data Flow Analysis - Foundations I) 南京大学<软件分析>课程06(Data Flow Analysi ...

  3. 软件分析——数据流分析2

    数据流分析的理论部分(foundation) 这一部分李越老师用了两课时(第五课 ,第六课 ),讲的很仔细,将一些比较抽象的概念也解释的很清楚,收获很多,顺便做了笔记和一点从自己角度的理解,将比窘上传 ...

  4. 编译器设计(十)——数据流分析

    文章目录 一.概述 二.迭代数据流分析 2.1 支配性 2.2 活跃变量分析 2.3 数据流分析的局限性 2.4 其他数据流问题 2.4.1 可用表达式 2.4.2 可达定义 2.4.3 可预测表达式 ...

  5. HMM——维特比算法(Viterbi algorithm)

    1. 前言 维特比算法针对HMM第三个问题,即解码或者预测问题,寻找最可能的隐藏状态序列: 对于一个特殊的隐马尔可夫模型(HMM)及一个相应的观察序列,找到生成此序列最可能的隐藏状态序列. 也就是说给 ...

  6. LLVM数据流分析的理论

    LLVM数据流分析的理论 标量优化(scalar目录): 死代码消除(BDCE.cpp[code],ADCE.cpp[code],DCE.cpp[code]), 全局值编号(GVN.cpp[code] ...

  7. 《OpenCV3编程入门》学习笔记8 图像轮廓与图像分割修复(五)分水岭算法(watershed algorithm)

    8.5 分水岭算法(watershed algorithm) 1.基于拓扑理论的数学形态学的分割方法. 2.基本思想:把图像看作测地学上的拓扑地貌,图像中每一点像素的灰度值表示该点的海拔高度,每一个局 ...

  8. 国内android应用商城中程序隐私泄露分析,基于数据流分析的Android应用隐私泄露检测研究...

    摘要: 随着技术的进步,智能手机给人们的生活带来了极大的便利.据统计,搭载Android智能系统的手机现如今已经占据了 81%的手机市场份额,这也正让安卓系统成为了攻击者窃取用户隐私数据的一个重要目标 ...

  9. C++ algorithm的sort函数总结

    sort函数 sort对给定区间进行排序,支持各种数据类型,迭代器,结构体,自定义排序规则 stable_sort 对给定区间进行稳定排序,且可保证相等元素的原本相对次序在排序后保持不变 partia ...

  10. SLAM之特征匹配(三)————RANSAC------LO-RANSAC Algorithm

    matlab 编译loransac,lapack mex ranH.c时一直链接错误. 原来mex在编译多个文件时要把所有的C文件都列出来.命令如下: mex loransacH.mex.c ranH ...

最新文章

  1. mySql中使用命令行建表基本操作
  2. 局部图像描述子——Harris角点检测器
  3. js,jquery获取页面元素距离浏览器工作区顶端的距离
  4. Django和Ajax
  5. 人生的主干,提及程序化
  6. 中关村-DIY高清之HDMI线导购
  7. 25个优秀的设计机构网站设计案例
  8. adb 重命名_adb中常用的命令
  9. 小学生通用计算机在线使用,Win7电脑可以使用一起小学软件的方法
  10. Spring JdbcTemplate 模板剖析 之 常用 增删改查
  11. 全球搜索引擎集合(主要有移动搜索APP的)
  12. 51单片机蜂鸣器演奏《小苹果》C语言程序,C利用51单片机蜂鸣器演奏音乐
  13. 最速下降法解析(理解笔记)
  14. 计算机一级考excel基础知识,计算机一级考试模拟题(word、excel、ppt以及基础知识)...
  15. 2021年信息系统监理师考试大纲
  16. b站用户年龄段占比_用户和电商变现上,微博、小红书、B站差别在哪里?
  17. 两代 2011/2014 Mac Mini 硬盘SSD性能提升研究。(SSD固态硬盘研究)
  18. SpringBoot整合screw生成数据库文档
  19. 【2022修复版】社群扫码进群活码引流完整运营源码/带视频搭建教程
  20. HTML+CSS一个简单的电影网页制作作业,学生个人html静态网页制作成品代码, html电影速递网

热门文章

  1. BP神经网络学习总结
  2. Restorator 导致win8或win8.1 打开程序提示不支持此接口的解决方法
  3. SAI钢笔工具如何使用,入门篇
  4. usbcan、can分析仪、can卡的产品特点和功能特点
  5. USBCAN分析仪的配套CAN和CANFD综合测试软件LKMaster软件解决工程师CAN总线测试难题
  6. Spug发布前端项目实战全过程
  7. 极限学习机(Extreme Learning Machine,ELM)详解
  8. 解决华为手机用rem单位,内容超出屏幕宽度问题
  9. 武汉大学2020年大学生程序设计大赛决赛(重现赛)J (oeis or 卡特兰数+可重集排列数)
  10. bootdo框架首页解析