P5-6
2021-04-28 14:54:57 1 举报
AI智能生成
南大软件分析P5
作者其他创作
大纲/内容
以另一种方式来看迭代算法
如何看待
给定一个具有k个节点的CFG(程序),迭代算法将在每次迭代中为每个节点n更新OUT [n]。
假设数据流分析中值的域为V,那么我们可以定义一个k元组。
(OUT[n1], OUT[n2], …, OUT[nk])
Vk表示为的集合(V1×V2…×Vk)的一个元素值,以保存每次迭代后的分析值。
(注:元素值Vk中的k应该在V的右上角,表示值域V上的k元组)
(OUT[n1], OUT[n2], …, OUT[nk])
Vk表示为的集合(V1×V2…×Vk)的一个元素值,以保存每次迭代后的分析值。
(注:元素值Vk中的k应该在V的右上角,表示值域V上的k元组)
通过应用传递函数和控制流处理(抽象为函数F),可以将每次迭代视为将Vk的元素值映射到Vk的新元素值的函数F:Vk→Vk
然后,该算法迭代输出一系列k元组,直到两个连续迭代中前一个k元组与后一个相同为止。
迭代过程
如果X = F(X),则X是函数F的不动点
上图的迭代过程中,就到达了一个不动点Xi
思考
迭代算法(或IN/OUT方程系统)为数据流分析提供了一个解决方案。
(1)是否保证算法可以终止或到达固定点,或者始终有解决方案?
(2)如果是这样,是否只有一种解决方案或只有一个固定点?
如果解决方案不止一个,那么我们的解决方案是最好的(最精确的)吗?
(3)算法何时会达到固定点,或者何时才能获得解决方案?
(2)如果是这样,是否只有一种解决方案或只有一个固定点?
如果解决方案不止一个,那么我们的解决方案是最好的(最精确的)吗?
(3)算法何时会达到固定点,或者何时才能获得解决方案?
要回答这些问题,需要先学习一些数学知识。
Partial Order(偏序)
定义
我们将偏序集poset定义为一对(P,⊑),其中⊑是二进制关系,
它定义了P上的偏序,并且具有以下属性:
它定义了P上的偏序,并且具有以下属性:
例子1
例子2
例子3
partial意味着,P中的一对元素值可能是没有⊑关系的(incomparable),
换句话说,不必每对set元素都必须满足顺序⊑,
例如,例子3中的字符串sin和pin之间就不存在子字符串的关系。
换句话说,不必每对set元素都必须满足顺序⊑,
例如,例子3中的字符串sin和pin之间就不存在子字符串的关系。
例子4
partial -> incomparable:{a}和{b}之间也不存在子集关系。
Upper and Lower Bounds(上界和下界)
定义
上界、下界
给定一个偏序集poset(P,⊑),且S⊆P,
如果对u∈P,∀x∈S,有x⊑u,我们说u是S的上界(upper bound)。
如果对l∈P,∀x∈S,l⊑x,则是S的下界(lower bound)。
如果对u∈P,∀x∈S,有x⊑u,我们说u是S的上界(upper bound)。
如果对l∈P,∀x∈S,l⊑x,则是S的下界(lower bound)。
最小上界、最大下界
我们定义S的最小上界(lub或join),写为⊔S。对于S的每个上界u,有⊔S⊑u。
我们定义S的最大下界(glb或meet),写为⊓S,对于S的每个下界l,有l⊑⊓S。
我们定义S的最大下界(glb或meet),写为⊓S,对于S的每个下界l,有l⊑⊓S。
通常,如果S仅包含两个元素a和b(S = {a,b}),则
⊔S可以写成a⊔b(a和b的join),
⊓S可以写成a⊓b(a和b的meet)。
⊔S可以写成a⊔b(a和b的join),
⊓S可以写成a⊓b(a和b的meet)。
一些属性
(1)不是每个偏序集poset都有lub或glb
(2)但是,如果poset有lub或glb,那么lub和glb将是唯一的
(2)的证明
Lattice, Semilattice, Complete and Product Lattice
Lattice
定义
给定一个偏序集poset(P,⊑),∀a,b∈P,
如果a⊔b和a⊓b存在,则(P,⊑)称为lattice
如果a⊔b和a⊓b存在,则(P,⊑)称为lattice
即,如果poset的每对元素都具有最小的上界和最大的下界,则偏序集poset是一个lattice
lattice就是一个poset,是一个特殊的poset
例子1
例子2
例子3
从上面的例子可以看到,a⊔b操作得到的一定是最小上界,而不是其他的更大的上界。⊓同理。
Semilattice
也即,对于poset中任意的一对元素值,只存在最小上界和最大下界,不存在其他更大的上界和更小的下界。
Complete Lattice
也即,对于poset中任意的一组元素值(子集),最小下界和最大上界都存在。
例子1
例子2
性质
注意:lattice可以是无限的偏序集,因为从定义可知,最小上界和最大下界是针对无限集中的任意两个元素值而言的。
Product Lattice
定义
性质
Data Flow Analysis Framework via Lattice
一个数据流框架 (D, L, F) 由以下3部分组成:
(1)D:数据流的方向:正向、反向,
(2)L:包含值的V域和⊔(join)、⊓(meet)操作符的lattice,
(3)F:一组从域V到域V的转换函数。
(1)D:数据流的方向:正向、反向,
(2)L:包含值的V域和⊔(join)、⊓(meet)操作符的lattice,
(3)F:一组从域V到域V的转换函数。
数据流分析可以看作是迭代地应用传递函数,以及对lattice的值进行join/meet运算
Monotonicity and Fixed Point Theorem
回顾“以另一种方式来看迭代算法”中思考的3个问题
Monotonicity(单调性)
定义
Fixed-Point Theorem(不动点定理)
定义
两个证明
不动点的存在性
不动点是最小(最大)的
不动点是最大的的证明同上
把迭代算法和不动点定理关联起来
如上所示的是lattice上函数的属性(不动点定理)。 我们不能说迭代算法也具有该特性,除非我们可以将迭代算法与不动点定理联系起来。
将迭代算法和不动点定理联系起来
如果product lattice Lk中的k个lattice都是complete和finite的,即(L,L,...,L),
则Lk也是complete和finite的。
则Lk也是complete和finite的。
在每次迭代中,都等同于认为我们应用了函数F,该函数由
(1)传递函数fi:每个节点的 L→L
(2)join / meet函数⊔/⊓:L×L→L 用于控制流汇合
(1)传递函数fi:每个节点的 L→L
(2)join / meet函数⊔/⊓:L×L→L 用于控制流汇合
证明函数F是单调的
基于(1)迭代算法和不动点定理是能够联系起来的,(2)函数F是单调的,则,不动点定理能够应用在数据流分析的迭代算法上。
目前三个问题只剩下一个问题
迭代算法什么时候会到达不动点
#iterations的最坏情况:CFG中lattice的高度与节点数的乘积
May/Must Analysis, A Lattice View
MOP and Distributivity
Meet-Over-All-Paths Solution (MOP)
Ours (Iterative Algorithm) vs. MOP
Bit-vector或者Gen/Kill问题(给join/meet分别设置为并/交)是可分配的(分布式的)。
但是也有一些分析不是分布式的。
Constant Propagation
Lattice
未初始化变量不是我们常量传播分析的重点
在每条路径汇合的PC上,我们都应对该PC上传入数据流值中的所有变量应用“ meet”
Transfer Function
Nondistributivity
Worklist Algorithm
工作列表算法是迭代算法的一种优化
0 条评论
下一页