【程序分析】5-6 数据流分析基础

目录

数据流分析迭代的结束点就是到达了一个函数的不动点

偏序

上界和下界、上确界和下确界

上界和下界

上确界和下确界

一些性质

半格

全格

product lattice

数据流分析和格

数据流分析的几个问题

第一问

第二问

第三问

lattice 上的单调性

lattice 不动点定理

证明我们求的不动点一定是最 小/大 不动点

迭代算法和不动点定理联系起来

常量分析

worklist algorithm


 程序分析网课笔记,同步CSDN记录一下

网课链接:

南京大学《软件分析》课程05(Data Flow Analysis - Foundations I)_哔哩哔哩_bilibili

南京大学《软件分析》课程06(Data Flow Analysis - Foundations II)_哔哩哔哩_bilibili

数据流分析迭代的结束点就是到达了一个函数的不动点

偏序

理解一下为什么要叫做偏序

上界和下界、上确界和下确界

上界和下界

上确界和下确界

一些性质

一个偏序集任意两个元素最小上确界和最大下确界都存在,这个偏序集就是一个格

注意三个要素:

  • 首先要是偏序集
  • 其次是偏序集里任意找两个元素
  • 这两个元素都要存在最小上确界和最大下确界

  • 有穷的格是全格
  • 但全格不一定都是有穷的格

半格

一个偏序集任意两个元素最小上确界和最大下确界只要存在一个,这个偏序集就是一个格

全格

这个在数据流分析里经常用,比较重要

一个,格里的任意一个子集,这个子集的最小上确界和最大下确界都存在,则这个格就是全格——区别于格的定义

  • 注意:这个子集的最小上确界和最大下确界不一定在这个子集里,但一定在这个格里

  • 每个全格都有 top 和 bottom

  • 每个有穷的格(即偏序集是有穷的)都是一个全格
    • 下面的例子一里正整数集就不是有穷的

几个例子:

product lattice

给 n 个格,如果每个格的最小上确界和最大下确界都存在,那么就可以得出一个 product lattice:每个 lattice 的乘积

  • 一个 product lattice 是一个格
  • 如果一个 product lattice 中的每个格都是全格,则 product lattic 也是全格

数据流分析和格

数据流分析框架:(D,L,F)

D:方向,前向分析还是后向分析

L:格

F:转换函数

即:数据流分析就是在 lattice 上用 meet/join 操作+转换函数 不断地迭代的过程

数据流分析的几个问题

第一问

是的,因为转换函数里的 gen 和 kill 是不变的,out 不会缩小,只可能扩大

第二问

不动点可以有多个不动点,x=F(x)的时候就是就是不动点

但是我们的方法求的是不是最精确的那个不动点呢?这个是重点——是的

第三问

lattice 上的单调性

lattice 不动点定理

证明我们求的不动点一定是最 小/大 不动点

迭代算法和不动点定理联系起来

证明以下:通过将迭代算法和不动点定理联系起来

MOP 更精确,为什么不用?——太复杂了,要穷举所有完全路径,复杂,而且有的路径不会用到也要穷举,没必要

常量分析

must analysis

常量分析不满足 MOP,不满足可分配性

D:forworad,越往下越安全但也无用,但越往下也越不准(must 分析就是这样)

NAC 是很 safe 的,所有都不是常量,很安全,但是是 unless 的

常量传播的 domain 是一个个 pair(变量 x,x 的值)

meet operation 也不是简单的交或并

转换函数:

上面的(x, _)的 _ 意思是通配符,就是因为有 x=... 这个语句,那不管你到这儿前 x 是什么值,我都可以 kill 掉,所以用通配符

上面的最后一句意思是:如果压根儿没有赋值语句,比如都是条件跳转语句之类的,那我们这个转换函数就直接传入什么传出什么,是一个恒等( identity )函数

从上面例子可以证明常量传播是不可分配的

从上面例子也可以看出 MOP 是比我们的算法更精确的:

  • must 分析越往下越不准
  • 常量分析下面是 NAC,所以 c 的值来说,10 比 NAC 更准
  • 而 NAC 是我们的算法求出来的,10 时 MOP 求出来的

worklist algorithm

是 iterative algorithm 的优化,比它更快

iterative algorithm 有很多冗余的计算:比如所有 out 里只有某一个 out 的一个位变化了(如 0 变为 1),但是却要把所有 basic block 的 out 都重新计算一遍

worklist algorithm 的优化就是:只重新 apply function 到 out 有变化basic block 

初始时所有 basic block 都加入 worklist 中,开始 while 循环,worklist 为空时退出循环

while 循环内:

  • 每轮循环都从 worklist 中拿出一个 bb(即 basic block)记作 B,并记录 B 现在的值,记作 old_OUT
  • 然后 meet operator+transfer function apply 到这个 B,得到这个 B 的新的 OUT[B]
  • 比较 apply 前后 B 的 out 值是否变化,如果变化了,说明这个 B 的后继的 out 都会变化,将 B 后继的 bb 都加入 worklist——为什么?因为这个 B 的 out 会作为其后继的 in,而如果一个 bb 的 in 没变那他的 out 就不会变(因为 gen 和 kill 固定),那如果 in 变了 out 自然也会变,而我们 worklist 就是关注那些 out 会变的 bb,所以要将 B 的后继 bb 都加入 worklist

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/623625.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

优惠券布局的最终方案------css属性mask

先贴图&#xff1a; 以上这些都是通过mask去实现出来&#xff1a; <!DOCTYPE html><html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"&g…

009Node.js自定义模块通过exports的使用(一)

module/tool.js function formatApi(api){return "http://www.shixiaobin.com/"api } exports.formatApiformatApi;app.js //引入http模块 const httprequire(http);const toolsrequire(./module/tools.js);console.log(tools);http.createServer(function (req,res…

基于STM32的RFID智能门锁系统

本文针对RFID技术&#xff0c;着重研究了基于单片机的智能门锁系统设计。首先&#xff0c;通过链接4*4按键模块与主控STM32&#xff0c;实现了多种模式&#xff0c;包括刷卡开锁、卡号权限管理、密码开锁、修改密码、显示实时时间等功能。其次&#xff0c;采用RC522模块与主控S…

1231: 寻找出现次数最多的数

解法&#xff1a; #include<iostream> #include<algorithm> #include<vector> #include<unordered_map> #include<utility> using namespace std; int main() {int n, a;cin >> n;unordered_map<int, int> mp;while (n--) {cin >…

解决:IDEA编译报错,自动切换JDK编译版本

一、IDEA切换JDK版本 要想在IDEA中完成对JDK版本的切换有多个地方需要我们进行修改 File | Settings | Build, Execution, Deployment | Compiler | Java Compiler File->ProjectStruct->platform settings->SDKS File->ProjectStruct->projectSettings->…

FreeRTOS_day1

1.总结keil5下载代码和编译代码需要注意的事项 下载代码前要对仿真进行设置 勾选后代码会立刻执行 勾选后会导致代码不能执行 写代码的时候要写在对应的begin和end之间&#xff0c;否则会被覆盖 2.总结STM32Cubemx的使用方法和需要注意的事项 ①打开软件&#xff0c;新建工程…

免费HTTPS证书获取攻略

申请SSL证书可简化为以下三个步骤&#xff1a; 第一步&#xff1a;选择证书类型与提供商 - 确定网站需求&#xff0c;选择合适的SSL证书类型&#xff08;如DV、OV、EV&#xff09;。 - 选取信誉良好的证书颁发机构&#xff08;CA&#xff09;。 永久免费SSL证书_永久免费htt…

深度学习知识点:卷积神经网络(CNN)

深度学习知识点&#xff1a;卷积神经网络&#xff08;CNN&#xff09; 前言卷积神经网络&#xff08;CNN&#xff09;卷积神经网络的结构Keras搭建CNN经典网络分类LeNetAlexNetAlexNet 对比LeNet 的优势&#xff1f; VGGVGG使用2个33卷积的优势在哪里&#xff1f;每层卷积是否只…

代码学习记录44---动态规划

随想录日记part44 t i m e &#xff1a; time&#xff1a; time&#xff1a; 2024.04.16 主要内容&#xff1a;今天开始要学习动态规划的相关知识了&#xff0c;今天的内容主要涉及&#xff1a;两个字符串的删除操作 &#xff1b;编辑距离 &#xff1b;编辑距离总结篇 583. 两…

GPT-4 都已经这么强了,那未来的 GPT-5 会是什么样子?

GPT-4 可以说是再一次颠覆了我对 AI 的认知&#xff0c;从文本到图片视频&#xff0c;再到逻辑推理&#xff0c;简直是神进步。 GPT5上线前夕&#xff0c;把GPT4慢慢弄成GPT3.5的效果&#xff0c;把GPT3.5逐渐弄成GPT3的效果&#xff0c;GPT5横空出世的时候就如GPT4对GPT3.5的…

一个开源跨平台嵌入式USB设备协议:TinyUSB

概述 TinyUSB 是一个用于嵌入式系统的开源跨平台 USB 主机/设备堆栈&#xff0c;设计为内存安全&#xff0c;无需动态分配&#xff0c;线程安全&#xff0c;所有中断事件都被推迟&#xff0c;然后在非 ISR 任务函数中处理。查看在线文档以获取更多详细信息。 源码链接&#xff…

Python统计分析库之statsmodels使用详解

概要 Python statsmodels是一个强大的统计分析库,提供了丰富的统计模型和数据处理功能,可用于数据分析、预测建模等多个领域。本文将介绍statsmodels库的安装、特性、基本功能、高级功能、实际应用场景等方面。 安装 安装statsmodels库非常简单,可以使用pip命令进行安装:…