一句话:将块抽象记忆化中控制流块摘要的计算并行化,实现领域无关的多线程软件模型检测并获显著加速。
随着多核处理器的普及,软件分析亟需利用并行计算资源,但许多程序分析方法在设计之初并未考虑多线程执行,重新改写既有算法既困难又易错,而直接以每个后继状态为粒度并行又过于细碎。本文针对这一问题提出了一种优雅的方案:并行计算块摘要。作者以基于摘要的程序分析中成功的块抽象记忆化(block-abstraction memoization)为基础,从其原始递归定义出发重新设计了验证流程,使其能够在多核共享内存机器上并行执行,同时保持对具体抽象域的独立性。实现与实验评估表明,该基于摘要的并行方法相比原有串行方法没有显著额外开销,并在使用多线程时取得了明显的加速比。
Recent development of software aims at massively parallel execution, because of the trend to increase the number of processing units per CPU socket. But many approaches for program analysis are not designed to benefit from a multi-threaded execution and lack support to utilize multi-core computers. Rewriting existing algorithms is difficult and error-prone, and the design of new parallel algorithms also has limitations. An orthogonal problem is the granularity: computing each successor state in parallel seems too fine-grained, so the open question is to find the right structural level for parallel execution. We propose an elegant solution to these problems: Block summaries should be computed in parallel. Many successful approaches to software verification are based on summaries of control-flow blocks, large blocks, or function bodies. Block-abstraction memoization is a successful domain-independent approach for summary-based program analysis. We redesigned the verification approach of block-abstraction memoization starting from its original recursive definition, such that it can run in a parallel manner for utilizing the available computation resources without losing its advantages of being independent from a certain abstract domain. We present an implementation of our new approach for multi-core shared-memory machines. The experimental evaluation shows that our summary-based approach has no significant overhead compared to the existing sequential approach and that it has a significant speedup when using multi-threading.
DOI 原文 ·
@inproceedings{paperbot4781,
title = {Domain-independent multi-threaded software model checking},
author = {Dirk Beyer and Karlheinz Friedberger},
booktitle = {ASE},
year = {2018},
doi = {10.1145/3238147.3238195}
}