CIVL: Formal Verification of Parallel Programs

CIVL is a framework for static analysis and verification of concurrent programs. One of the main challenges to practical application of these techniques is the large number of ways to express concurrency: MPI, OpenMP, CUDA, and Pthreads, for example, are just a few of many "concurrency dialects" in wide use today. These dialects are constantly evolving and it is increasingly common to use several of them in a single "hybrid" program. CIVL addresses these problems by providing a concurrency intermediate verification language, CIVL-C, as well as translators that consume C programs using these dialects and produce CIVL-C. Analysis and verification tools which operate on CIVL-C can then be applied easily to a wide variety of concurrent C programs. We demonstrate CIVL's error detection and verification capabilities on (1) an MPI+OpenMP program that estimates π and contains a subtle race condition, and (2) an MPI-based 1d-wave simulator that fails to conform to a simple sequential implementation.

[1]  Gennaro Parlato,et al.  CSeq: A Sequentialization Tool for C - (Competition Contribution) , 2013, TACAS.

[2]  Message Passing Interface Forum MPI: A message - passing interface standard , 1994 .

[3]  Lubos Brim,et al.  DiVinE 3.0 - An Explicit-State Model Checker for Multithreaded C & C++ Programs , 2013, CAV.

[4]  Shuvendu K. Lahiri,et al.  SYMDIFF: A Language-Agnostic Semantic Diff Tool for Imperative Programs , 2012, CAV.

[5]  Gerard J. Holzmann,et al.  The SPIN Model Checker , 2003 .

[6]  A. W. Roscoe,et al.  FDR3 - A Modern Refinement Checker for CSP , 2014, TACAS.

[7]  Darko Marinov,et al.  A Framework for State-Space Exploration of Java-Based Actor Programs , 2009, 2009 IEEE/ACM International Conference on Automated Software Engineering.

[8]  Chao-Tung Yang,et al.  Hybrid CUDA, OpenMP, and MPI parallel programming on multicore GPU clusters , 2011, Comput. Phys. Commun..

[9]  Matthew B. Dwyer,et al.  CIVL: the concurrency intermediate verification language , 2015, SC15: International Conference for High Performance Computing, Networking, Storage and Analysis.

[10]  Stephen F. Siegel,et al.  FEVS: A Functional Equivalence Verification Suite for High-Performance Scientific Computing , 2011, Math. Comput. Sci..

[11]  Corina S. Pasareanu,et al.  Symbolic PathFinder: symbolic execution of Java bytecode , 2010, ASE.

[12]  Stephen F. Siegel,et al.  TASS: The Toolkit for Accurate Scientific Software , 2011, Math. Comput. Sci..

[13]  Konstantin Serebryany,et al.  ThreadSanitizer: data race detection in practice , 2009, WBIA '09.

[14]  Mateusz Ujma,et al.  jpf-concurrent: An extension of Java PathFinder for java.util.concurrent , 2012, ArXiv.

[15]  N. A. Schuster,et al.  THE SPIN OF Be , 1951 .

[16]  Stephen F. Siegel,et al.  The Toolkit for Accurate Scientific Software , 2011 .

[17]  Anna Philippou,et al.  Tools and Algorithms for the Construction and Analysis of Systems , 2018, Lecture Notes in Computer Science.

[18]  Peng Li,et al.  Practical Symbolic Race Checking of GPU Programs , 2014, SC14: International Conference for High Performance Computing, Networking, Storage and Analysis.

[19]  Peng Li,et al.  GKLEE: concolic verification and test generation for GPUs , 2012, PPoPP '12.

[20]  Rajeev Thakur,et al.  Hybrid parallel programming with MPI and unified parallel C , 2010, Conf. Computing Frontiers.

[21]  Shuvendu K. Lahiri,et al.  Conditional Equivalence , 2010 .

[22]  Nikolaj Bjørner,et al.  Z3: An Efficient SMT Solver , 2008, TACAS.

[23]  Derek Bruening,et al.  AddressSanitizer: A Fast Address Sanity Checker , 2012, USENIX Annual Technical Conference.

[24]  Martin Schulz,et al.  Formal analysis of MPI-based parallel programs , 2011, Commun. ACM.