论文部分内容阅读
静态分析是指在不运行代码的情况下进行的程序分析,其被广泛应用于编译优化、缺陷检测等软件工程任务。近年来,该方向的不少研究工作致力于如何从程序代码中获取足够的信息,充分地表达其语法、语义模型,以精确预测其行为。然而,随着通用组件的广泛复用、软件应用范围的持续扩张等,现代软件系统的规模和复杂性不断增长,要对大规模复杂软件系统进行高精度的静态分析,因其极大数据量的计算,特别是在资源受限的条件下,效率和可扩展性成为受持续关注的难点和热点。而图形处理器(GPU)作为具有并行计算能力的常见设备,被广泛应用于大数据分析、图像处理等计算密集的领域,且已有尝试利用GPU加速静态分析的相关工作,但仅针对特定的分析。本文针对大规模高精度静态分析的低效率和低可扩展性问题,研究在单机环境下基于GPU和核外计算实现静态分析并行化方法。本文的主要工作如下:1.针对低效率问题,提出了基于GPU加速的静态分析并行化方法。其定义了一种适合于GPU独特的执行模式和内存模型的数据结构——可变宽的位向量VWBitVector来刻画程序图,并设计了相应的高度并行化的图操作,将静态分析问题转化为图可达性问题,实现高精度静态分析算法的并行化。2.针对低可扩展性问题,提出了基于硬盘的分区化核外计算优化方法。其设计了一种基于预估计算量的分区调度策略,根据可用显存将程序图划分为若干个分区,在静态分析的过程中按需将分区在硬盘和GPU上进行调度,以在提高算法的可扩展性的同时尽量降低数据传输的开销。3.基于上述算法,实现了一个基于GPU和硬盘的静态分析工具GpuSpa,并选取了 5个大型开源软件系统作为分析对象和2个相关的静态分析工具作为比较对象,进行了性能评估实验,实验结果表明GpuSpa具有较好的效率和可扩展性。