程序分析信息并行提取方法及装置与流程

文档序号:14443628阅读:205来源:国知局
程序分析信息并行提取方法及装置与流程

本发明涉及虚拟机技术领域,尤其涉及一种程序分析信息并行提取方法及装置。



背景技术:

低层虚拟机(lowlevelvirtualmachine,简称llvm)是一个开源的编译框架,可将高级语言编写的程序转化为其自定义的中间表示(intermediaterepresentation,简称ir)。ir以文件形式保存,其中包含了大量的程序分析信息,包括数据流分析信息、控制流分析信息、函数调用分析信息、程序依赖分析信息等。程序分析信息在包含程序优化和错误检测等在内的众多工作领域有着重要和广泛的应用。

现有技术中对ir文件中的程序分析信息进行提取时,主要采取的是串行迭代提取方式,针对某一种具体的提取需求实施提取。即以ir文件内容文本为输入,将具体的提取需求表达为模式,然后在ir文件内容文本中逐行执行字符串模式匹配的算法。具体表现为采用循环处理的方式依次处理给定ir文件文本内容的第一行至最后一行,循环的每一次执行(迭代)提取出一部分子串,每一次提取对应一个具体的提取需求。

对于大规模应用程序所产生的海量ir内容文本,逐行的串行处理方式效率低下,而且对于不同提取需求需要多次执行迭代提取过程,会产生许多不必要的重复。



技术实现要素:

本发明提供一种程序分析信息并行提取方法及装置,以解决逐行的串行处理方式效率低下的问题。

第一方面,本发明提供一种程序分析信息并行提取方法,包括:

根据输入的中间表示ir文件以及提取需求,提取程序分析信息的特征模式;

根据所述程序分析信息的特征模式,对所述ir文件中的内容文本进行非特征信息过滤,得到过滤后的ir内容文本;

根据并行加速硬件的内存信息和所述ir内容文本的大小,确定线程调度策略;

根据预设的信息特征类别以及所述线程调度策略,对所述ir内容文本中的程序分析信息进行并行提取,得到与所述信息特征类别对应的程序分析信息。

第二方面,本发明提供一种程序分析信息并行提取装置,包括:

预处理模块,用于根据输入的中间表示ir文件以及提取需求,提取程序分析信息的特征模式;

所述预处理模块,还用于根据所述程序分析信息的特征模式,对所述ir文件中的内容文本进行非特征信息过滤,得到过滤后的ir内容文本;

并行提取主模块,用于根据并行加速硬件的内存信息和所述ir内容文本的大小,确定线程调度策略;

所述并行提取主模块,用于根据预设的信息特征类别以及所述线程调度策略,对所述ir内容文本中的程序分析信息进行并行提取,得到与所述信息特征类别对应的程序分析信息。

本发明提供的程序分析信息并行提取方法及装置,包括:根据输入的中间表示ir文件以及提取需求,提取程序分析信息的特征模式;根据所述程序分析信息的特征模式,对所述ir文件中的内容文本进行非特征信息过滤,得到过滤后的ir内容文本;根据并行加速硬件的内存信息和所述ir内容文本的大小,确定线程调度策略;根据预设的信息特征类别以及所述线程调度策略,对所述ir内容文本中的程序分析信息进行并行提取,得到与所述信息特征类别对应的程序分析信息,由于预先对ir文件进行了信息过滤,减少了后续提取的数据量,进一步的,对过滤后的信息进行并行提取,提取效率较高,而且针对每个信息特征类别进行提取,减少了重复信息。

附图说明

此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。

图1是本发明提供的程序分析信息并行提取方法一实施例的流程示意图;

图2是本发明提供的并程序分析信息并行提取方法一实施例的架构示意图;

图3是本发明提供的程序分析信息并行提取方法一实施例的并行存储示意图;

图4是本发明提供的程序分析信息并行提取方法一实施例的控制流类程序分析信息分类示意图;

图5是本发明提供的程序分析信息并行提取装置一实施例的结构示意图。

通过上述附图,已示出本公开明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本公开构思的范围,而是通过参考特定实施例为本领域技术人员说明本公开的概念。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的设备的例子。

本发明的说明书和权利要求书及所述附图中的术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。

首先对本发明所涉及的名词进行解释:

程序分析:指对计算机程序行为进行自动分析的过程,主要包括静态分析和动态分析两类。

数据流分析:数据流分析是一种程序分析技术,通过从程序代码中收集程序的语义信息,并通过代数方法在编译时确定变量的定义和使用情况。

控制流分析:产生程序的有向控制流图,其中节点表示基本代码块,节点间的有向边代表控制流路径,反向边代表可能存在的循环。

函数调用分析:分析程序中的函数调用关系,可生成函数调用图,其中节点表示函数,有向边表示函数之间的调用。

程序依赖分析:程序中的依赖主要分为数据依赖和控制依赖两大类。

本发明实施例中的方法可以应用于如图2所示的场景中,图2中由四个主要部分组成:ir原始信息预处理模块(pre_process)、并行提取存储模块(par_store)、并行提取主模块(par_extract)以及提取信息重组模块(inf_reform)。其中,pre_process模块负责ir原始信息的读取、程序分析信息的特征分析以及ir原始信息的初步筛选工作;par_store模块为整个程序分析信息的并行提取过程提供存储支持;par_extract模块按照一组调度策略实施程序分析信息的并行提取;inf_reform模块根据不同的应用需求对已提取的程序分析信息进行重组安排,例如根据输入的重组需求和重组规则,得到对应的重组输出。

图1是本发明提供的程序分析信息并行提取方法一实施例的流程示意图。如图1所示,本实施例提供的程序分析信息并行提取方法,包括:

步骤101、根据输入的中间表示ir文件以及提取需求,提取程序分析信息的特征模式。

步骤102、根据所述程序分析信息的特征模式,对所述ir文件中的内容文本进行非特征信息过滤,得到过滤后的ir内容文本。

具体的,步骤101、步骤102可以采用pre_process模块实现,目的是为了极大程度地减小待提取程序分析信息的范围,首先以原始ir文件为输入,执行特定类别程序分析信息特征模式的提取,即根据提取需求,提取特征模式,也即不同的提取需求对应不同类别的特征模式。并以此为基础进行特征模式指导的非特征信息过滤,进而去除那些与提取需求无关的ir文件中的内容信息。以函数调用及控制流信息提取需求为例,在实施控制流类程序分析信息的提取过程中,特征模式可归纳为:patterncfg={entry,funcname_entry,label,call},即包括函数名、基本块名、函数调用指令(call)、跳转指令(label)等;而在函数调用类程序分析信息的提取过程中,特征模式可归纳为:patterncg={@funcname,call},则包括函数名、函数定义指令、函数调用指令等。在上述表示中,funcname代表具体的函数名称。需要指出的是,针对不同的程序分析信息提取需求,上述特征模式集合可以实现自适应的扩充。

在获取程序分析特征模式后,可以通过过滤完成非特征信息的去除。其中,可以根据所归纳的特征模式生成ir文件预处理的过滤模板,之后根据过滤模板完成非特征信息的过滤。

可选的,步骤102之前,还可以进行如下操作:

将所述ir文件中的内容文本进行分割,得到至少一个信息串;所述信息串包括以下至少一项:函数定义、函数名称、基本块节点或终止操作;

将所述信息串按照在所述ir文件中的内容文本中的排列顺序依次存储在第一二维数组中;所述第一二维数组的长度为所述至少一个信息串中信息串的最大长度;所述第一二维数组的宽度为所述至少一个信息串的个数。

具体的,如图2所示,par_store模块服务于并行提取主模块par_extract,同时也是par_extract模块工作的存储基础。该模块基于ir文件的原始信息的内容文本及并行加速硬件(图形处理器(graphicsprocessingunit,简称gpu))的向量处理能力综合考虑,可以采用行划分模式(将内容文本分割为多行信息串,对应存储在二维数组中),将ir文件的的内容文本进行分割,得到多个信息串,每个信息串对应图3中的一行,信息串可以包括函数定义、函数名称、基本块结点和终止操作br等。

图3中给出了基于行划分的ir内容文本并行存储的一个示例。其中,ir信息串存放在二维数组结构中,图中所示“横向大小”、“纵向大小”分别代表所分配二维数组的长度和宽度,二维数组的长度为信息串的最大长度,宽度为信息串的个数。例如图3中为过滤后的信息串,则将信息串分配对应的线程进行分类提取,n为分配的线程块的个数,m为每个线程块中所包含的线程个数。例如图3中define为一个信息串。

步骤103、根据并行加速硬件的内存信息和所述ir内容文本的大小,确定线程调度策略。

具体的,以过滤后的ir内容文本为输入,根据并行加速硬件的内存信息,如共享内存规格、全局内存结构及ir内容文本的大小,确定具体的线程调度策略。例如,假设共享内存大小为48kb,全局内存大小为512m,当ir内容文本的信息串匹配存取无重复访问时,可以启用全局内存方式,如图3所示,按二维数组中信息串的纵向维度对线程块进行划分,之后再以二维数组中信息串的每一行为单位完成对线程块中各线程的任务调度,并行执行n*m个线程提取信息特征类别对应的信息串。

可选的,步骤103具体可以采用如下方式实现:

根据所述并行加速硬件的内存信息和所述第二二维数组中所述信息串的个数以及长度,将所述信息串进行分组,得到至少一个信息串组;所述内存信息包括:共享内存信息和全局内存信息;

将所述至少一个信息串组分别分配与所述信息串组对应的线程块,得到所述线程调度策略;其中,每个信息串组对应一个线程块;所述信息串组中每一个信息串对应所述线程块中的一个线程;所述线程用于执行对所述信息串进行提取。

具体的,根据并行加速硬件的内存信息,第二二维数组中所述信息串的个数以及长度,即第二二维数组的横向维度和纵向维度对信息串进行分组,每一个信息串组分配一个线程块,然后线程块中的每一个线程用于执行对该信息串中的某一信息特征类别的信息串的提取。

步骤104、根据预设的信息特征类别以及所述线程调度策略,对所述ir内容文本中的程序分析信息进行并行提取,得到与所述信息特征类别对应的程序分析信息。

具体的,按照预设的信息特征类别,并行执行线程,实施基于模式匹配方式的并行提取。

若所述提取需求为对控制流类程序分析信息的提取,则所述信息特征类别,包括:函数名信息类别、基本块结点信息类别和基本块后继信息类别。

以控制流类程序分析信息提取为例,预设的信息特征类别集合为:ecfg={sfuncs,sbbnodes,sbbsuccnodes},其中,sfuncs代表函数名信息集合;sbbnodes代表基本块结点信息集合;sbbsuccnodes代表基本块后继结点信息集合。

图4中给出了以控制流类程序分析信息并行提取为例的不同类别程序分析信息的存储分配示意图。图中函数名funcs代表函数名信息,基本块结点bbnode代表当前基本块结点,基本块后继结点bbsuccnodes代表当前基本块结点的后继结点,可以将类别标识信息中的类别标志设定为不同数值,这些数值分别对应不同的类别的程序分析信息,其中1代表函数名信息;2代表基本块结点信息;3代表当前基本块结点的后继结点信息。单类位置块索引对应该信息串在二维数组中存储的索引信息。之后可以针对上述三类程序分析信息,并行建立其综合位置索引,进而实现更为快速的信息分类提取。

可选的,步骤104,具体可以采用如下方式实现:

根据预设的信息特征类别以及所述线程调度策略,并行执行所述线程对所述第二二维数组中所述信息串进行提取。

可选的,并行执行线程对二维数组中的信息串进行提取,具体可以采用如下方式:

并行执行所述线程计算所述信息特征类别中每个类别对应的信息串的位置索引,并提取与所述每个类别对应的信息串;

将提取出的信息串根据所述位置索引以及所述每个类别的类别标识信息进行存储。

具体的,并行执行分配的线程块中的线程计算所述信息特征类别中每个类别对应的信息串的位置索引,并提取与所述每个类别对应的信息串;由于将所有的分配的线程块中的线程并行执行,因此提取效率较高。

将提取出的信息串根据所述位置索引以及所述每个类别的类别标识信息进行存储。

示例性的,并行执行的线程计算各类别对应的信息串的位置索引idx。

对所有的idx及各类别中的每一项信息串,执行下述操作:

1)若该项信息串模式匹配为函数名,则将其置入函数名sfuncs集合;例如图4中,main、add代表函数名,位置索引分别为0和9,类别标志为1。

2)若该项信息串模式匹配为当前基本块结点,则将其置入基本块结点sbbnode集合;例如图4中,entry、if.then、if.else、if.end、entry分别代表基本块结点,位置索引分别为1、4、6、8和10,类别标志为2。

3)若该项信息串模式匹配为后继基本块结点,则将其置入基本块后继结点sbbsuccnodes集合;例如图4中,if.then、if.else、if.end、if.end分别代表基本块后继结点,位置索引分别为2、3、5和7,类别标志为3。

最后可以汇总sfuncs,sbbnodes,sbbsuccnodes集合,合并形成已提取信息集合s_extracted。

本实施例的程序分析信息并行提取方法,包括:根据输入的中间表示ir文件以及提取需求,提取程序分析信息的特征模式;根据所述程序分析信息的特征模式,对所述ir文件中的内容文本进行非特征信息过滤,得到过滤后的ir内容文本;根据并行加速硬件的内存信息和所述ir内容文本的大小,确定线程调度策略;根据预设的信息特征类别以及所述线程调度策略,对所述ir内容文本中的程序分析信息进行并行提取,得到与所述信息特征类别对应的程序分析信息,由于预先对ir文件进行了信息过滤,而且对过滤后的信息进行并行提取,提取效率较高,而且针对每个信息特征类别进行提取,减少了重复信息。

在上述实施例的基础上,可选的,步骤102可以采用如下方式实现:

根据所述特征模式生成过滤模板;

根据所述过滤模板对所述ir文件中的内容文本进行非特征信息过滤,得到过滤后的ir内容文本。

可选的,根据所述过滤模板对所述ir文件中的内容文本进行非特征信息过滤,得到过滤后的ir内容文本,具体包括:

确定所述ir文件中的内容文本中的信息串与所述过滤模板是否匹配;

若是,则将所述信息串按照所述排列顺序依次存储在第二二维数组中,得到过滤后的ir内容文本的信息串;所述第二二维数组的长度为所述过滤后的ir内容文本的信息串中信息串的最大长度;所述第二二维数组的宽度为所述过滤后的ir内容文本的信息串的个数。

具体的,可以根据所归纳的特征模式生成ir文件预处理的过滤模板,之后按照过滤模板完成非特征信息的过滤。

按照过滤模板完成非特征信息的过滤具体可以是将ir文件中的内容文本中的信息串与过滤模块进行匹配,然后将匹配的信息串存入一二维数组中。具体工作步骤如下:

1)提取特定提取需求的程序分析信息特征模式集合patterns;

其中,可选的,若所述提取需求为对控制流类程序分析信息的提取,则所述特征模式包括函数名、基本块名、函数调用指令和跳转指令;

若所述提取需求为对函数调用类程序分析信息的提取,则所述特征模式包括函数名、函数定义指令和函数调用指令。

2)读取ir原始信息文本fileir(存储在第一二维数组中的信息串);

3)对于fileir中的各条信息串:如果该信息串与patterns匹配,则将该信息串进行分割并放入第二二维数组中,如图3所示。

上述具体实施方式中,对ir文件进行预处理,过滤掉与提取需求无关的程序分析信息,减少了后续的数据量,使得提取效率较高。

在上述实施例的基础上,可选的,本实施例的方法,还可以包括如下步骤:

根据与所述信息特征类别对应的程序分析信息以及应用需求,将所述程序分析信息进行重组。

具体的,在信息特征类别对应的程序分析信息并行提取完成后,不同类别的程序分析信息中的信息串位置索引会升序组织在已提取信息集合s_extracted中。提取信息重组模块则会在此基础上,根据不同的应用需求对已并行提取完成的程序分析信息进行重组。

若应用需求为图形化需求,则可以根据类别标识信息对输入信息完成分类;其中,输入信息为步骤104中得到的不同信息特征类别对应的程序分析信息,进一步可以是按照位置索引升序组织后的信息串集合。

若类别标识信息表示函数名信息,则输出函数名称及画图工具软件graphviz标签信息。

若类别标识信息表示基本块结点信息,位置索引为i,位置索引i+1对应的信息串对应的类别标识信息为基本块结点的后继结点信息,则输出位置索引i对应的信息串结点和位置索引i+1对应的信息串结点,从位置索引i对应的信息串结点出发,到位置索引i+1对应的信息串结点结束的有向边。即通过graphviz构造当前基本块结点指向其后继基本块结点的边。

若类别标识信息表示基本块结点信息,位置索引为i,位置索引i+1对应的信息串对应的类别标识信息不为基本块结点的后继结点信息,则输出位置索引i对应的信息串结点

示例性的,以图形化控制流类程序分析信息为例,提取信息重组模块的工作流程如下:

1)根据graphviz要求,根据类别标识信息(如类别标志)对输入的信息完成分类;

2)逐项处理已提取信息集合s_extracted:

2.1)若该项信息串的位置索引i对应的类别标志为1,则输出函数名称及相应的graphviz标签信息。

2.2)若该项信息串的位置索引i对应的类别标志为2并且位置索引i+1的类别标志为3,则输出以位置索引i对应的信息串结点和位置索引i+1对应的信息串结点,从位置索引i对应的信息串结点出发,到位置索引i+1对应的信息串结点结束的有向边。即通过graphviz构造当前基本块结点指向其后继基本块结点的边。

2.3)若该项信息串的位置索引i对应的类别标志为2并且位置索引i+1的类别标志不为3,则表明当前基本块结点无后继结点,仅输出位置索引i对应的信息串结点。

3)输出其它控制流图图形化所需的标签信息。

本发明实施例,ir原始信息预处理装置可针对不同的程序分析信息提取需求,实现了不必要提取信息的大幅去除,从而极大的减小了程序分析信息提取的工作总量。并行提取存储装置可做到充分利用并行加速硬件的存储能力,为数据并行加速的执行提供了有力的存储支持。并行提取主装置采用并行方式,打破了串行迭代提取方式的局限,可更高效的实现海量程序分析信息的快速提取。提取信息重组装置为已提取信息的进一步有效利用提供了有效接口。

图5为本发明提供的程序分析信息并行提取装置一实施例的结构示意图,如图5所示,本实施例的程序分析信息并行提取装置,包括:

预处理模块501,用于根据输入的中间表示ir文件以及提取需求,提取程序分析信息的特征模式;

所述预处理模块501,还用于根据所述程序分析信息的特征模式,对所述ir文件中的内容文本进行非特征信息过滤,得到过滤后的ir内容文本;

并行提取主模块502,用于根据并行加速硬件的内存信息和所述ir内容文本的大小,确定线程调度策略;

所述并行提取主模块502,用于根据预设的信息特征类别以及所述线程调度策略,对所述ir内容文本中的程序分析信息进行并行提取,得到与所述信息特征类别对应的程序分析信息。

可选的,还包括:

存储模块,用于:

将所述ir文件中的内容文本进行分割,得到至少一个信息串;所述信息串包括以下至少一项:函数定义、函数名称、基本块节点或终止操作;

将所述信息串按照在所述ir文件中的内容文本中的排列顺序依次存储在第一二维数组中;所述第一二维数组的长度为所述至少一个信息串中信息串的最大长度;所述第一二维数组的宽度为所述至少一个信息串的个数。

可选的,预处理模块501,具体用于:

根据所述特征模式生成过滤模板;

根据所述过滤模板对所述ir文件中的内容文本进行非特征信息过滤,得到过滤后的ir内容文本。

可选的,预处理模块501,具体用于:

确定所述ir文件中的内容文本中的信息串与所述过滤模板是否匹配;

若是,则将所述信息串按照所述排列顺序依次存储在第二二维数组中,得到过滤后的ir内容文本的信息串;所述第二二维数组的长度为所述过滤后的ir内容文本的信息串中信息串的最大长度;所述第二二维数组的宽度为所述过滤后的ir内容文本的信息串的个数。

可选的,并行提取主模块502,具体用于:

根据所述并行加速硬件的内存信息和所述第二二维数组中所述信息串的个数以及长度,将所述信息串进行分组,得到至少一个信息串组;所述内存信息包括:共享内存信息和全局内存信息;

将所述至少一个信息串组分别分配与所述信息串组对应的线程块,得到所述线程调度策略;其中,每个信息串组对应一个线程块;所述信息串组中每一个信息串对应所述线程块中的一个线程;所述线程用于执行对所述信息串进行提取。

可选的,并行提取主模块502,具体用于:

根据预设的信息特征类别以及所述线程调度策略,并行执行所述线程对所述第二二维数组中所述信息串进行提取。

可选的,并行提取主模块502,具体用于:

并行执行所述线程计算所述信息特征类别中每个类别对应的信息串的位置索引,并提取与所述每个类别对应的信息串;

将提取出的信息串根据所述位置索引以及所述每个类别的类别标识信息进行存储。

可选的,还包括:

提取信息重组模块,用于根据与所述信息特征类别对应的程序分析信息以及应用需求,将所述程序分析信息进行重组。

本实施例的装置,可以用于执行上述方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。

本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本发明旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求书指出。

应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求书来限制。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1