CN109783386A - 基于gpu的大规模软件高精度静态分析方法 - Google Patents
基于gpu的大规模软件高精度静态分析方法 Download PDFInfo
- Publication number
- CN109783386A CN109783386A CN201910042530.5A CN201910042530A CN109783386A CN 109783386 A CN109783386 A CN 109783386A CN 201910042530 A CN201910042530 A CN 201910042530A CN 109783386 A CN109783386 A CN 109783386A
- Authority
- CN
- China
- Prior art keywords
- gpu
- static analysis
- large scope
- analysis
- scope software
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000004458 analytical method Methods 0.000 title claims abstract description 48
- 230000003068 static effect Effects 0.000 title claims abstract description 26
- 238000000034 method Methods 0.000 claims abstract description 27
- 238000006243 chemical reaction Methods 0.000 claims abstract description 6
- 238000010586 diagram Methods 0.000 claims abstract description 6
- 238000005206 flow analysis Methods 0.000 claims abstract description 6
- 238000004519 manufacturing process Methods 0.000 claims description 3
- 230000007547 defect Effects 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 3
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000007405 data analysis Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明公开一种基于GPU的大规模软件高精度静态分析方法。该方法首先将一系列具体的程序分析,如指针分析、数据流分析、程序切片等,转化为一种特殊的图可达性问题——上下文无关语言(CFL)可达性问题;然后将转化后的程序图和相应的语法规则传到图形处理器(GPU)上进行并行CFL可达性计算,即根据语法规则动态地加边,直至不动点;如果图的大小超过显存的限定值,则每次只能调入部分数据参加计算,其余部分保存到硬盘。通过对GPU和外存的利用,本发明方法具有较高的效率和可扩展性,可用以对大规模软件系统进行复杂代码分析。
Description
技术领域
本发明涉及程序静态分析技术,利用GPU加快分析的速度,属于软件工程领域。
背景技术
随着现代软件系统变得越来越庞大和复杂,软件中的缺陷也急剧增加,如何精确而又高效地寻找软件中的缺陷就尤为重要。目前软件缺陷的检测方法以“是否需要运行被测软件”为准可划分为两大类:动态测试和静态分析。一般来说,动态测试由于获取了具体的运行信息,因此报出的缺陷更为准确;而静态分析可以比较全面地考虑执行路径,因此能发现更多的缺陷。常用的静态分析技术包括数据流分析、指针分析、符号执行等。
但是,静态分析发展至今,对大规模软件系统进行高精度的分析,因其算法的高复杂度以及高内存消耗,仍很困难。已有的在中央处理器(CPU)上的并行算法,因CPU仅包含几个专为串行处理而优化的核心,效率提升有限。GPU凭借其突出的大规模并行计算能力,已被广泛应用于大数据分析等领域,但目前还没有被用到通用的静态分析算法中。本发明将一系列具体的程序分析,如指针分析、数据流分析、程序切片等,转化为一种特殊的图可达性问题——CFL可达性问题,在GPU上对其进行并行计算,并利用海量硬盘进行存储,具有较高的效率和可扩展性。
发明内容
目前对大规模软件系统进行高精度的分析,因其算法的高复杂度以及高内存消耗,仍很困难。已有的CPU并行算法,因CPU仅包含几个专为串行处理而优化的核心,效率提升有限。且其计算大多只依赖于内存,一旦内存不足,算法就无法完成计算,难以处理大规模问题,可扩展性受限。
本发明为解决上述技术问题采用以下技术方案:
本发明提出的一种基于GPU的大规模软件高精度静态分析方法,包括以下步骤:
步骤1)进行过程内联,就是将源程序中所有的过程调用替换为被调用过程的过程体,以实现上下文敏感的过程间分析。
步骤2)根据不同的静态分析类型,如指针分析、数据流分析、程序切片等,前端将源程序转化为图。例如对于指针分析,每个相关的程序表达式对应于图中的一个结点,而表达式之间的如赋值、解引用等关系则表示成结点之间带标签的有向边。
步骤3)不同的静态分析类型有各自的语法规则。语法规则用于确定,对于图中的任意结点v1、v2,是否存在一条从v1到v2的路径,该路径上的标签串与某个产生式如A::=BC相匹配,若存在则加一条从v1到v2的A边。
步骤4)将转化后的程序图和相应的语法规则输入后端进行计算:
步骤4.1)图在GPU上用位向量表示,且位向量的元素的大小可调(2i)。相应地将一个线程束(GPU的基本执行单元,一个线程束32个线程)划分为若干个虚线程束。计算时为每个结点分配一个虚线程束。
步骤4.2)根据可用的显存的大小将图中的结点划分为若干个逻辑区间,每个分区的大小相似。
步骤4.3)依次将每两个分区从硬盘传到GPU上进行并行CFL可达性计算,即根据语法规则动态地加边,直至全局不动点。每个分区中的边分为old、new和tmp,分别表示上一轮循环之前的边、上一轮循环所新加的边和当前的这轮循环中产生的边,且在每一轮循环结束时对它们进行更新。计算只在old和new,new和new之间进行,这样可以避免重复。
步骤4.4)如果在计算过程中其中一个分区的大小超过限定值,则将其均分,一个传回GPU继续计算,一个存到硬盘。
步骤5)计算完成输出的目标标签边所构成的子图即为分析的结果。
有益效果:本发明采用以上技术方案,与现有技术相比,具体以下有益效果:
1)通过将一系列具体的程序分析转化为图可达性问题统一解决,本方法更具普遍性。
2)本方法利用GPU的大规模并行计算能力加快分析的速度,具有较高的效率。
3)本方法通过对海量硬盘的利用,使其能够处理大规模软件系统(千万行代码),具有较高的可扩展性。
附图说明
图1是本发明实施例的基于GPU的大规模软件高精度静态分析方法的系统框架。
图2是指针分析相应的一个转化示例(左边是一个相关的程序片段,右边是转化后的图,D边表示解引用,A边表示赋值)。
图3是指针分析相应的语法规则。
图4是位向量示意图(base表示元素的范围,bits中的每一位表示一个数,next指向下一个元素)。
图5是图的分区划分示例图。
图6是CFL可达性计算的算法伪代码。
具体实施方式
下面对本发明使用的基于GPU的大规模软件高精度静态分析方法具体实施例作更详细的描述。
根据附图1所示的基于GPU的大规模软件高精度静态分析方法的系统框架,本发明的具体实施方式为:
1)进行过程内联,就是将源程序中所有的过程调用替换为被调用过程的过程体,以实现上下文敏感的过程间分析。
2)根据不同的静态分析类型,如指针分析、数据流分析、程序切片等,前端将源程序转化为图。例如对于指针分析,每个相关的程序表达式对应于图中的一个结点,而表达式之间的如赋值、解引用等关系则表示成结点之间带标签的有向边,如图2所示。
3)不同的静态分析类型有各自的语法规则。语法规则用于确定,对于图中的任意结点v1、v2,是否存在一条从v1到v2的路径,该路径上的标签串与某个产生式如A::=BC相匹配,若存在则加一条从v1到v2的A边。指针分析相应的语法规则如图3所示。
4)将转化后的程序图和相应的语法规则输入后端进行计算:
4.1)图在GPU上用位向量表示,位向量如图4所示,且位向量的元素的大小可调(2i)。相应地将一个线程束(GPU的基本执行单元,一个线程束32个线程)划分为若干个虚线程束。计算时为每个结点分配一个虚线程束。
4.2)根据可用的显存的大小将图中的结点划分为若干个逻辑区间,每个分区的大小相似。如图5所示。
4.3)依次将每两个分区从硬盘传到GPU上进行并行CFL可达性计算,即根据语法规则动态地加边,直至全局不动点。CFL可达性计算的算法伪代码如图6所示。每个分区中的边分为old、new和tmp,分别表示上一轮循环之前的边、上一轮循环所新加的边和当前的这轮循环中产生的边,且在每一轮循环结束时对它们进行更新。计算只在old和new,new和new之间进行,这样可以避免重复。
4.4)如果在计算过程中其中一个分区的大小超过限定值,则将其均分,一个传回GPU继续计算,一个存到硬盘。
5)计算完成输出的目标标签边所构成的子图即为分析的结果。
以上所述,仅为本发明的较佳实施例揭露如上,然而并非用以限定本方案,任何熟悉本专业的技术人员,在不脱离本方案技术方案范围内,当可利用上述揭示的技术内容作出些许更改或修饰为等同变化的等效实施例,但凡是未脱离本技术方案的内容,依据本发明的技术实质对以上实施例所作的任何简单修改,等同变化与修饰,均仍属于本发明技术方案的范围内。
Claims (6)
1.一种基于GPU的大规模软件高精度静态分析方法,其特征在于,该方法包括以下步骤:
步骤1)进行过程内联,就是将源程序中所有的过程调用替换为被调用过程的过程体,以实现上下文敏感的过程间分析;
步骤2)根据不同的静态分析类型,前端将源程序转化为图;
步骤3)不同的静态分析类型有各自的语法规则;语法规则用于确定,对于图中的任意结点v1、v2,是否存在一条从v1到v2的路径,该路径上的标签串与某个产生式如A::=BC相匹配,若存在则加一条从v1到v2的A边;
步骤4)将转化后的程序图和相应的语法规则输入后端进行计算:
步骤4.1)图在GPU上用位向量表示,且位向量的元素的大小可调(2i);相应地将一个线程束(GPU的基本执行单元,一个线程束32个线程)划分为若干个虚线程束;计算时为每个结点分配一个虚线程束;
步骤4.2)根据可用的显存的大小将图中的结点划分为若干个逻辑区间,每个分区的大小相似;
步骤4.3)依次将每两个分区从硬盘传到GPU上进行并行CFL可达性计算,即根据语法规则动态地加边,直至全局不动点;每个分区中的边分为old、new和tmp,分别表示上一轮循环之前的边、上一轮循环所新加的边和当前的这轮循环中产生的边,且在每一轮循环结束时对它们进行更新;计算只在old和new,new和new之间进行,避免重复;
步骤4.4)如果在计算过程中其中一个分区的大小超过限定值,则将其均分,一个传回GPU继续计算,一个存到硬盘;
步骤5)计算完成输出的目标标签边所构成的子图即为分析的结果。
2.根据权利要求1所述的基于GPU的大规模软件高精度静态分析方法,其特征在于,所述步骤4.1中位向量的元素的大小及相应的虚线程束的大小可调。
3.根据权利要求1所述的基于GPU的大规模软件高精度静态分析方法,其特征在于,所述步骤4.3中每次载入两个分区,一直迭代直至局部不动点,且为所有的分区保持一致的old和new。
4.根据权利要求1所述的基于GPU的大规模软件高精度静态分析方法,其特征在于,通过对GPU和外存的利用,该方法具有较高的效率和可扩展性,可用以对大规模软件系统进行复杂代码分析。
5.根据权利要求1所述的基于GPU的大规模软件高精度静态分析方法,其特征在于,步骤2中所述静态分析类型包括指针分析、数据流分析或程序切片。
6.根据权利要求5所述的基于GPU的大规模软件高精度静态分析方法,其特征在于,所述指针分析,每个相关的程序表达式对应于图中的一个结点,而表达式之间的如赋值、解引用等关系则表示成结点之间带标签的有向边。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910042530.5A CN109783386A (zh) | 2019-01-17 | 2019-01-17 | 基于gpu的大规模软件高精度静态分析方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910042530.5A CN109783386A (zh) | 2019-01-17 | 2019-01-17 | 基于gpu的大规模软件高精度静态分析方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109783386A true CN109783386A (zh) | 2019-05-21 |
Family
ID=66500815
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910042530.5A Pending CN109783386A (zh) | 2019-01-17 | 2019-01-17 | 基于gpu的大规模软件高精度静态分析方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109783386A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111104335A (zh) * | 2019-12-25 | 2020-05-05 | 清华大学 | 一种基于多层次分析的c语言缺陷检测方法及装置 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103336718A (zh) * | 2013-07-04 | 2013-10-02 | 北京航空航天大学 | 一种gpu线程调度优化方法 |
-
2019
- 2019-01-17 CN CN201910042530.5A patent/CN109783386A/zh active Pending
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103336718A (zh) * | 2013-07-04 | 2013-10-02 | 北京航空航天大学 | 一种gpu线程调度优化方法 |
Non-Patent Citations (5)
Title |
---|
KAI WANG等: "Graspan:A Single-machine Disk-based Graph System for Interprocedural Static Analyses of Large-scale Systems Code", 《HTTPS://GITHUB.COM/Z-ZHIQIANG/GPUSPA》 * |
MARIO M´ENDEZ-LOJO等: "A GPU Implementation of Inclusion-based Points-to Analysis", 《17TH ACM SIGPLAN SYMPOSIUM ON PRINCIPLES AND PRACTICE OF PARALLEL PROGRAMMING》 * |
ZHIQIANG ZUO: "A Scalable GPU-accelerated Out-of-Core Static Analysis Engine", 《22ND ACM INTERNATIONAL CONFERENCE ON ARCHITECTUAL SUPPORT FOR PROGRAMMING LANGUAGES AND OPERATING SYSTEMS》 * |
吴方君: "《Z形式规约切片的研究》", 31 December 2006 * |
张舒 褚艳利: "《GPU高性能运算之CUDA》", 31 October 2009, 中国水利水电出版社 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111104335A (zh) * | 2019-12-25 | 2020-05-05 | 清华大学 | 一种基于多层次分析的c语言缺陷检测方法及装置 |
CN111104335B (zh) * | 2019-12-25 | 2021-08-24 | 清华大学 | 一种基于多层次分析的c语言缺陷检测方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109242105B (zh) | 代码优化方法、装置、设备及介质 | |
JP6605573B2 (ja) | 並列ディシジョン・ツリー・プロセッサー・アーキテクチャ | |
Wahib et al. | Scalable kernel fusion for memory-bound GPU applications | |
US9785413B2 (en) | Methods and apparatus to eliminate partial-redundant vector loads | |
US10902130B2 (en) | Guiding automated testing of binary programs | |
US9038080B2 (en) | Method and system for heterogeneous filtering framework for shared memory data access hazard reports | |
CN112732577A (zh) | 一种多任务软件测试用例进化生成方法 | |
CN110399182B (zh) | 一种cuda线程放置优化方法 | |
Bingöl et al. | GateKeeper-GPU: Fast and accurate pre-alignment filtering in short read mapping | |
US8117604B2 (en) | Architecture cloning for power PC processors | |
CN109783386A (zh) | 基于gpu的大规模软件高精度静态分析方法 | |
CN105988855B (zh) | 即时编译参数优化方法及装置 | |
US9182960B2 (en) | Loop distribution detection program and loop distribution detection method | |
US9715374B2 (en) | Multi-branch determination syntax optimization apparatus | |
US20210334709A1 (en) | Breadth-first, depth-next training of cognitive models based on decision trees | |
US10789203B2 (en) | Data processing apparatus, data processing method, and program recording medium | |
US20240028970A1 (en) | Svm model training method and apparatus, device, and computer-readable storage medium | |
CN114420209A (zh) | 基于测序数据的病原微生物检测方法及系统 | |
CN104679521A (zh) | 一种精确计算任务高速缓存wcet的分析方法 | |
Singh et al. | Snowpack: Efficient parameter choice for GPU kernels via static analysis and statistical prediction | |
US10642876B1 (en) | Query processing pipeline for semi-structured and unstructured data | |
CN115861030B (zh) | 图形处理器及其系统变量生成方法、介质 | |
Tomiyama et al. | Automatic parameter optimization for edit distance algorithm on GPU | |
Sankaran et al. | Discriminating equivalent algorithms via relative performance | |
CN110795106B (zh) | 程序向量化过程中动静结合的内存别名分析处理方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190521 |