一种无损压缩系统依赖图的方法及装置制造方法

文档序号:6494108阅读:206来源:国知局
一种无损压缩系统依赖图的方法及装置制造方法
【专利摘要】本发明的实施例提供一种无损压缩系统依赖图的方法及装置,涉及计算机领域,能够实现系统依赖图的无损压缩,并降低系统依赖图的规模,从而降低以系统依赖图为基础的切片算法的开销。其方法为:首先提取程序中所有变量之间的等价关系,而后通过该等价关系将程序中所有变量分为不同的等价类,并根据这些等价类为系统依赖图中的节点设置键值,而后根据系统依赖图中的节点的键值压缩系统依赖图。本发明实施例用于对系统依赖图进行压缩。
【专利说明】一种无损压缩系统依赖图的方法及装置
【技术领域】
[0001]本发明涉及计算机领域,尤其涉及一种无损压缩系统依赖图的方法及装置。
【背景技术】
[0002]程序静态切片是一种重要的程序分析技术,广泛应用于程序理解、测试、调试、验证、维护,能够帮助程序员提取所关注代码,降低程序分析、错误验证、维护等领域。目前,主流的切片工具均采用基于系统依赖图的图可达算法。
[0003]系统依赖图(System Dependence Graph, SDG)是一个有向图,是对程序依赖图(Program Dependence Graph7PDG)的扩展。以系统依赖图为基础的程序切片算法,是通过遍历系统依赖图,从中提取出可能影响某个变量在程序中某个位置上的取值的程序代码。但是现有的切片算法开销与精度都无法满足大规模使用程序的需求。
[0004]因此,为了解决上述问题,现有技术通常采用的技术包括:一、通过提高别名分析精度降低SDG的规模,因为SDG的规模不仅决定其自身的计算与存储的时空开销,还直接影响切片的效率。其中,别名分析,也称指针分析,是一种识别程序中可能用两种以上的方法访问的存储位置的静态分析技术。别名分析所得出的结果是基于SDG的程序切片技术中用于创建系统依赖图时所需的输入之一。二、通过限制切片算法的上下文敏感性(ContextSensitivity)来减少切片算法遍历SDG的开销。
[0005]在实现上述降低SDG规模和减少切片算法的时空开销的过程中,发明人发现现有技术中至少存在如下问题:
[0006]提高指针分析的精度虽然可以适度降低SDG的规模,但高精度的指针分析算法本身不仅需要高昂的时空开销,也几乎无助于切片精度的提高。而采用限制切片算法的上下文敏感性来缓解遍历SDG的开销,会使切片的精度降低。

【发明内容】

[0007]本发明的实施例提供一种无损压缩系统依赖图的方法及装置,能够实现系统依赖图的无损压缩,并降低系统依赖图的规模,从而降低以系统依赖图为基础的切片算法的开销。
[0008]为达到上述目的,本发明的实施例采用如下技术方案:
[0009]第一方面,提供一种无损压缩系统依赖图的方法,包括:
[0010]根据别名分析信息获取程序中所有变量间的等价关系,并根据所述等价关系将所有变量分为不同的等价类,其中,所述别名分析信息是根据别名分析算法得到的;
[0011]根据系统依赖图中的各个节点所代表的变量所属的等价类为所述系统依赖图中的各个节点设置键值;
[0012]根据所述系统依赖图中的各个节点的键值对所述系统依赖图进行压缩。
[0013]在第一种可能的实现方式中,结合第一方面,所述根据别名分析信息获取程序中所有变量间的等价关系,并根据所述等价关系将所有变量分为不同的等价类包括:[0014]根据所述别名分析信息建立从第一变量集合到指向所述变量集合中每个变量的指针集合的幂集的映射f,所述第一变量集合为程序中所有变量的集合;
[0015]根据所述映射f建立从所述指针集合的幂集到第二变量集合的映射f,,以将所有变量分为不同的等价类;所述第二变量集合为被同一组指针所指向的变量的集合。
[0016]在第二种可能的实现方式中,结合第一方面或第一方面的第一种可能的实现方式,所述根据所述别名分析信息建立从第一变量集合到指向所述变量集合中每个变量的指针集合的幂集的映射f包括:
[0017]为程序中的每个指针变量建立一个由该指针变量所指向的变量构成的指向集,为所有指向集中出现的每个变量建立一个空集合;
[0018]将每个指针变量添加到该指针变量所指向的变量对应的空集合中,以得到所述映射f。
[0019]在第三种可能的实现方式中,结合第一方面或第一方面的第一种可能的实现方式或第一方面的第二种可能的实现方式,根据所述映射f建立从所述指针集合的幂集到第二变量集合的映射F',以将所有变量分为不同的等价类包括:
[0020]建立第i个空集合,将所述映射f的定义域中一个变量var,以及所有被映射到f(var)的变量添加到所述第i个空集合中,得到第i个等价类,并对所述第i个等价类设置唯一的编号,并从所述映射f的定义域中删除添加到所述第i个空集合中的变量,直至映射f的定义域中的变量个数为O ;其中,i的起始值为I,所述变量var表示映射f的定义域中的任意一个变量。
[0021]在第四种可能的实现方式中,结合第一方面或第一方面的第一种可能的实现方式至第一方面的第三种可能的实现方式,所述根据系统依赖图中的各个节点所代表的变量所属的等价类为所述系统依赖图中的各个节点设置键值包括:
[0022]将所述系统依赖图上的各个节点所代表的变量所属的等价类的编号对应设置为所述各个节点的键值。
[0023]在第五种可能的实现方式中,结合第一方面或第一方面的第一种可能的实现方式至第一方面的第四种可能的实现方式,所述根据所述系统依赖图中的各个节点的键值对所述系统依赖图进行压缩包括:
[0024]若所述系统依赖图上的任意一个节点的前驱节点集合或者后继节点集合中的任意两个节点拥有相同的键值,并且所述任意两个节点中有一个是副作用节点,则将所述任意两个节点中的副作用节点的出入边依次转化为所述任意两个节点中另外一个节点的出入边;
[0025]删除所述系统依赖图中所有孤立的节点;
[0026]合并所述系统依赖图上具有相同的源点和汇点的有向边。
[0027]第二方面,提供一种系统依赖图无损压缩装置,包括:
[0028]等价类获取模块,用于根据别名分析信息获取程序中所有变量间的等价关系,并根据所述等价关系将所有变量分为不同的等价类,其中,所述别名分析信息是根据别名分析算法得到的;
[0029]键值设置模块,用于根据系统依赖图中的各个节点所代表的变量所属的等价类为所述系统依赖图中的各个节点设置键值;[0030]依赖图压缩模块,用于根据所述系统依赖图中的各个节点的键值对所述系统依赖图进行压缩。
[0031]在第一种可能的实现方式中,结合第二方面,所述等价类获取模块包括:
[0032]映射建立子模块,用于根据所述别名分析信息建立从第一变量集合到指向所述变量集合中每个变量的指针集合的幂集的映射f,所述第一变量集合为程序中所有变量的集合;
[0033]等价类获取子模块,用于根据所述映射f建立从所述指针集合的幂集到第二变量集合的映射f,,所述第二变量集合为被同一组指针所指向的变量的集合。
[0034]在第二种可能的实现方式中,结合第二方面或第二方面的第一种可能的实现方式,所述映射建立子模块具体用于:
[0035]为程序中的每个指针变量建立一个由该指针变量所指向的变量构成的指向集,为所有指向集中出现的每个变量建立一个空集合;
[0036]将每个指针变量添加到该指针变量所指向的变量对应的空集合中,以得到所述映射f。
[0037]在第三种可能的实现方式中,结合第二方面或第二方面的第一种可能的实现方式或第二方面的第二种可能的实现方式,所述等价类获取子模块具体用于:
[0038]建立第i个空集合,将所述映射f的定义域中一个变量var,以及所有被映射到f(var)的变量添加到所述第i个空集合中,得到第i个等价类,并对所述第i个等价类设置唯一的编号,并从所述映射f的定义域中删除添加到所述第i个空集合中的变量,直至映射f的定义域中的变量个数为O ;其中,i的起始值为I,所述变量var表示映射f的定义域中的任意一个变量。
[0039]在第四种可能的实现方式中,结合第二方面或第二方面的第一种可能的实现方式至第二方面的第三种可能的实现方式,所述键值设置模块具体用于:
[0040]将所述系统依赖图上的各个节点所代表的变量所属的等价类的编号对应设置为所述各个节点的键值。
[0041]在第五种可能的实现方式中,结合第二方面或第二方面的第一种可能的实现方式至第二方面的第四种可能的实现方式,所述依赖图压缩模块包括:
[0042]出入边转化子模块,用于若系统依赖图上的某个节点的前驱节点集合或者后继节点集合中的任意两个节点拥有相同的键值,并且所述任意两个节点中有一个是副作用节点,则将所述任意两个节点中的副作用节点的出入边依次转化为所述任意两个节点中另外一个节点的出入边;
[0043]节点删除子模块,用于删除系统依赖图中所有孤立的节点;
[0044]合并子模块,用于合并系统依赖图上具有相同的源点和汇点的有向边。
[0045]本发明的实施例提供一种无损压缩系统依赖图的方法及装置,首先提取程序中变量间的等价关系,而后通过该等价关系将程序中变量分为不同的等价类,并根据这些等价类为系统依赖图中的节点设置键值,而后根据系统依赖图中的节点的键值压缩系统依赖图,能够实现系统依赖图的无损压缩,并降低系统依赖图的规模,从而降低以系统依赖图为基础的切片算法的开销。【专利附图】

【附图说明】
[0046]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0047]图1为本发明实施例提供的一种无损压缩系统依赖图的方法的流程示意图;
[0048]图2为本发明另一实施例提供的一种无损压缩系统依赖图的方法的流程示意图;
[0049]图3为本发明实施例提供的程序片段示意图;
[0050]图4为本发明实施例提供的未经压缩的系统依赖图;
[0051]图5为本发明实施例提供的系统依赖图压缩过程示意图一;
[0052]图6为本发明实施例提供的系统依赖图压缩过程示意图二 ;
[0053]图7为本发明实施例提供的经过压缩后的系统依赖图;
[0054]图8为本发明实施例提供的一种系统依赖图无损压缩装置的结构示意图;
[0055]图9为本发明实施例提供的另一种系统依赖图无损压缩装置的结构示意图;
[0056]图10为本发明实施例提供的又一种系统依赖图无损压缩装置的结构示意图;
[0057]图11为本发明另一实施例提供的一种系统依赖图无损压缩装置的结构示意图。
【具体实施方式】
[0058]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0059]本发明实施例提供一种无损压缩系统依赖图的方法,如图1所示,该方法包括:
[0060]S101、根据别名分析信息获取程序中所有变量间的等价关系,并根据等价关系将所有变量分为不同的等价类,其中,别名分析信息是根据别名分析算法得到的。
[0061]S102、根据系统依赖图中的各个节点所代表的变量所属的等价类为系统依赖图中的各个节点设置键值。
[0062]S103、根据系统依赖图中的各个节点的键值对系统依赖图进行压缩。
[0063]其中,本发明中的系统依赖图节点之间可以定义为:
[0064]系统依赖图上两个节点U和V等价(记做u?V),当且仅当,除u本身的后向切片夕卜,以来途中任一包含U的切片也必然包含V,反之亦然。
[0065]故假设如果合并了节点u和V后,得到的系统依赖图上至少存在一个切片与合并前的系统依赖图上由相同切片标准得到的切片不同,则合并前的切片一定不同时包括u和V,而合并的前提是U和V等价,这样就出现了矛盾,故按照等价关系合并后得到的系统依赖图上的切片精度与合并前一致,这样也就实现了系统依赖图的无损压缩。
[0066]本发明的实施例提供一种无损压缩系统依赖图的方法,首先提取程序中变量间的等价关系,而后通过该等价关系将程序中变量分为不同的等价类,并根据这些等价类为系统依赖图中的节点设置键值,而后根据系统依赖图中的节点的键值压缩系统依赖图,能够实现系统依赖图的无损压缩,并降低系统依赖图的规模,从而降低以系统依赖图为基础的切片算法的开销。
[0067]本发明另一实施例提供一种无损压缩系统依赖图的方法,如图2所示,该方法包括:
[0068]S201、根据别名分析信息建立从第一变量集合到指向变量集合中每个变量的指针集合的幂集的映射f,第一变量集合为程序中所有变量的集合。其中,别名分析信息是,根据别名分析算法得到的。
[0069]具体的,可以通过以下步骤实现:
[0070]第一步,根据别名分析算法为程序中的每个指针变量(可以记为ptr)建立一个由该指针变量所指向的变量构成的指向集(可以记为ptr_t0_set),为所有指向集中出现的每个变量建立一个空集合(可以记为Svm);
[0071]第二步,将每个指针变量添加到该指针变量所指向的变量对应的空集合中,以得到映射f。
[0072]示例性的,得到映射f的过程可以通过以下伪码表示:
[0073]
【权利要求】
1.一种无损压缩系统依赖图的方法,其特征在于,包括: 根据别名分析信息获取程序中所有变量间的等价关系,并根据所述等价关系将所有变量分为不同的等价类;其中,所述别名分析信息是根据别名分析算法得到的; 根据系统依赖图中的各个节点所代表的变量所属的等价类为所述系统依赖图中的各个节点设置键值; 根据所述系统依赖图中的各个节点的键值对所述系统依赖图进行压缩。
2.根据权利要求1所述的无损压缩系统依赖图的方法,其特征在于,所述根据别名分析信息获取程序中所有变量间的等价关系,并根据所述等价关系将所有变量分为不同的等价类包括: 根据所述别名分析信息建立从第一变量集合到指向所述变量集合中每个变量的指针集合的幂集的映射f,所述第一变量集合为程序中所有变量的集合; 根据所述映射f建立从所述指针集合的幂集到第二变量集合的映射f,,将所有变量分为不同的等价类;所述第二变量集合为被同一组指针所指向的变量的集合。
3.根据权利要求2所述的无损压缩系统依赖图的方法,其特征在于,所述根据所述别名分析信息建立从第一变量集合到指向所述变量集合中每个变量的指针集合的幂集的映射f包括: 为程序中的每个指针变量建立一个由该指针变量所指向的变量构成的指向集,为所有指向集中出现的每个变量建立一个空集合; 将每个指针变量添加到该指针变量所指向的变量对应的空集合中,以得到所述映射f。
4.根据权利要求2所述的无损压缩系统依赖图的方法,其特征在于,根据所述映射f建立从所述指针集合的幂集到第二变量集合的映射f,,将所有变量分为不同的等价类包括: 建立第i个空集合,将所述映射f的定义域中一个变量var,以及所有被映射到f (var)的变量添加到所述第i个空集合中,得到第i个等价类,并对所述第i个等价类设置编号,并从所述映射f的定义域中删除添加到所述第i个空集合中的变量,直至映射f的定义域中的变量个数为O ;其中,i的起始值为I,所述变量var表示映射f的定义域中的任意一个变量。
5.根据权利要求1至4任意一项所述的无损压缩系统依赖图的方法,其特征在于,所述根据系统依赖图中的各个节点所代表的变量所属的等价类为所述系统依赖图中的各个节点设置键值包括: 将所述系统依赖图上的各个节点所代表的变量所属的等价类的编号对应设置为所述各个节点的键值。
6.根据权利要求1至5任意一项所述的无损压缩系统依赖图的方法,其特征在于,所述根据所述系统依赖图中的各个节点的键值对所述系统依赖图进行压缩包括: 若所述系统依赖图上的任意一个节点的前驱节点集合或者后继节点集合中的任意两个节点拥有相同的键值,并且所述任意两个节点中有一个是副作用节点,则将所述任意两个节点中的副作用节点的出入边依次转化为所述任意两个节点中另外一个节点的出入边; 删除所述系统依赖图中所有孤立的节点;合并所述系统依赖图上具有相同的源点和汇点的有向边。
7.一种系统依赖图无损压缩装置,其特征在于,包括: 等价类获取模块,用于根据别名分析信息获取程序中所有变量间的等价关系,并根据所述等价关系将所有变量分为不同的等价类,其中,所述别名分析信息是根据别名分析算法得到的; 键值设置模块,用于根据系统依赖图中的各个节点所代表的变量所属的等价类为所述系统依赖图中的各个节点设置键值; 依赖图压缩模块,用于根据所述系统依赖图中的各个节点的键值对所述系统依赖图进行压缩。
8.根据权利要求7所述的系统依赖图无损压缩装置,其特征在于,所述等价类获取模块包括: 映射建立子模块,用于根据所述别名分析信息建立从第一变量集合到指向所述变量集合中每个变量的指针集合的幂集的映射f,所述第一变量集合为程序中所有变量的集合; 等价类获取子模块,用于根据所述映射f建立从所述指针集合的幂集到第二变量集合的映射f',所述第二变量集合为被同一组指针所指向的变量的集合。
9.根据权利要求8所述的系统依赖图无损压缩装置,其特征在于,所述映射建立子模块具体用于: 为程序中的每个指针变量建立一个由该指针变量所指向的变量构成的指向集,为所有指向集中出现的每个变量建立一个空集合; 将每个指针变量添加到该指针变量所指向的变量对应的空集合中,以得到所述映射f。
10.根据权利要求8所述的系统依赖图无损压缩装置,其特征在于,所述等价类获取子模块具体用于: 建立第i个空集合,将所述映射f的定义域中一个变量var,以及所有被映射到f(var)的变量添加到所述第i个空集合中,得到第i个等价类,并对所述第i个等价类设置编号,并从所述映射f的定义域中删除添加到所述第i个空集合中的变量,直至映射f的定义域中的变量个数为O ;其中,i的起始值为I,所述变量var表示映射f的定义域中的任意一个变量。
11.根据权利要求7至10任意一项所述的系统依赖图无损压缩装置,其特征在于,所述键值设置模块具体用于: 将所述系统依赖图上的各个节点所代表的变量所属的等价类的编号对应设置为所述各个节点的键值。
12.根据权利要求7至11任意一项所述的系统依赖图无损压缩装置,其特征在于,所述依赖图压缩模块包括: 出入边转化子模块,用于若系统依赖图上的某个节点的前驱节点集合或者后继节点集合中的任意两个节点拥有相同的键值,并且所述任意两个节点中有一个是副作用节点,则将所述任意两个节点中的副作用节点的出入边依次转化为所述任意两个节点中另外一个节点的出入边; 节点删除子模块,用于删除系统依赖图中所有孤立的节点; 合并子模块,用于合 并系统依赖图上具有相同的源点和汇点的有向边。
【文档编号】G06F9/44GK103902273SQ201210584770
【公开日】2014年7月2日 申请日期:2012年12月28日 优先权日:2012年12月28日
【发明者】李丰, 霍玮, 陈聪明, 衷璐洁, 张兆庆, 冯晓兵 申请人:华为技术有限公司, 中国科学院计算技术研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1