【技术实现步骤摘要】
一种针对基于分解的多面体抽象域的并行加速方法
[0001]本专利技术涉及静态程序分析
,特别是涉及一种针对基于分解的多面体抽象域的并行加速方法。
技术介绍
[0002]数值抽象域是静态分析器的重要组成。静态分析器为每个程序点计算不变式,然后根据不变式检测程序是否存在数值相关的缺陷,这些缺陷包括除零错误、算术溢出、数组访问越界等。最为常用的数值抽象域包括区间抽象域、八边形抽象域和多面体抽象域。其中区间抽象域可表达的约束形式为x∈[a,b],八边形抽象域可表达的约束形式为
±
x
i
±
x
j
≤c,多面体抽象域可表达约束形式为由此可见,区间抽象域的表达能力最弱,无法表达多个变量之间的约束关系;八边形抽象域的表达能力稍强,可以表达两个变量之间的约束关系;多面体抽象域的表达能力最强,可以表示任意多个变量之间的线性约束关系。但是,计算复杂度是:区间抽象域<八边形抽象域<多面体抽象域,三者的分别是O(n)、O(n2)和指数级。对数值抽象域而言, ...
【技术保护点】
【技术特征摘要】
1.一种针对基于分解的多面体抽象域的并行加速方法,其特征在于,包括以下要点:S1:针对Chernikova算法的并行加速方法;S2:针对基于分解的交操作的并行加速方法;S3:针对基于分解的接合操作的并行加速方法;S4:针对基于分解的加宽操作的并行加速方法;S5:针对基于分解的包含测试的并行加速方法;S6:针对基于分解的条件操作的并行加速方法;S7:针对基于分解的赋值操作的并行加速方法。2.根据权利要求1所述的针对基于分解的多面体抽象域的并行加速方法,其特征在于,所述要点S1针对Chernikova算法的并行加速方法具体包括以下步骤:S11:主线程根据负载均衡原则把将要进行的计算划分为多个任务,并将任务加入线程池的任务队列,如若之前的迭代没有为子线程分配专属内存,则为每个子线程分配内存以保存它们的计算结果,子线程从生成子矩阵中只读取数据,向生成子中写入数据由主线程完成;S12:从任务队列中取得任务的线程开始运行,判断属于自身任务集合的射线对是否相邻,若相邻则生成新射线,并将结果写入属于本线程的内存区域;S13:待线程池的所有线程计算完毕后,主线程将子线程生成的射线拷贝到生成子矩阵。3.根据权利要求1所述的针对基于分解的多面体抽象域的并行加速方法,其特征在于,所述要点S2针对基于分解的交操作的并行加速方法具体包括以下步骤:S21:主线程计算划分π
P
和π
Q
的最小上界π
O
,作为结果多面体O的划分;主线程根据负载均衡原则把将要进行的计算划分为多个任务,并将任务加入线程池的任务队列;S22:从任务队列中取得任务的线程开始运行;每个线程的计算任务是:根据主线程指定的任务区间[begin,end),计算结果多面体O的因子(O
begin
,O
begin+1
,...,O
end
‑1);子线程计算因子O
k
的步骤包括:将多面体P中和变量集合π
O
,k
‑
有关的因子的约束矩阵合并到约束矩阵将多面体Q中和变量集合π
O
,k
‑
有关的因子的约束矩阵合并到约束矩阵以作为因子O
k
的约束矩阵,最后使用Chernikova算法为因子O
k
计算生成子矩阵S23:主线程等待线程池所有线程计算完成,返回多面体O=(O1,O2,...)及其划分π
O
。4.根据权利要求1所述的针对基于分解的多面体抽象域的并行加速方法,其特征在于,所述要点S3针对基于分解的接合操作的并行加速方法具体包括以下步骤:S31:进行第一阶段,重构多面体P为P
′
,重构多面体Q为Q
′
,并比较P
′
和Q
′
的对应因子是否相等;首先,主线程计算划分π
P
和π
Q
的最小上界π,主线程根据负载均衡原则把将要进行的计算划分为多个任务,并将任务加入线程池的任务队列;S32:从任务队列中取得任务的线程开始运行,每个线程的计算任务是:根据主线程指定的任务区间[begin,end),重构对P的部分因子,得到(P
′
begin
,P
′
begin+1
,...,P
′
end
‑1);重构多面体Q的部分因子,得到(Q
′
begin
,Q
′
begin+1
,...,Q
′
end
‑1);比较P
′
k
和Q
′
k
(其中k∈,begin,end))是否相等,将比较结果写入is_equal_array[k]中;S33:主线程等待所有子线程完成计算,第一阶段结束,进入第二阶段;在第二阶段中,
主线程首先遍历is_equal_array,连接is_equal_array中false位置对应的多面体P
′
的因子,得到大因子P
′
T
;连接is_equal_array中false位置对应的多面体Q
′
的因子,得到大因子Q
′
T
;合并因子P
′
T
和Q
′
T
的生成子,得到生成子矩阵F,然后使用所述要点S1提出的并行Chernikova算法计算F对应的约束矩阵C。S34:主线程将所述步骤S43中的(C,F)作为结果多面体O的一个因子加入O,并将is_equal_array中true位置对应的多面体P
′
的因子加入O。计算O的划分π
O
,然后返回O及其划分π
O
。5.根据权利要求1所述的针对基于分解的多面体抽象域的并行加速方法,其特征在于,所述要点S4针对基于分解的加宽操作的并行加速方法具体包括以下步骤:S41:主线程计算划分π
P
和π
Q
的最小上界π
O
,作为结果多面体的划分π
O
。主线程根据负载均衡原则把将要进行的计算划分为多个任务,并将任务加入线程池的任务队列;S42:从任务队列中取得任务的线程开始运行;每个线程的计算任务是:根据主线程指定的任务区间[begin,end),计算因子(...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。