Dynamic Symbolic Verification of MPI Programs

The success of dynamic verification techniques for Message Passing Interface (MPI) programs rests on their ability to address communication nondeterminism. As the number of processes in the program grows, the dynamic verification techniques suffer from the problem of exponential growth in the size of the reachable state space. In this work, we provide a hybrid verification technique for message passing programs that combines explicit-state dynamic verification with symbolic analysis. The dynamic verification component deterministically replays the execution runs of the program, while the symbolic component encodes a set of interleavings of the observed run of the program in a quantifier-free first order logic formula and verifies it for communication deadlocks. In the absence of property violations, it performs analysis to generate a different run of the program that does not fall in the set of already verified runs. We demonstrate the effectiveness of our approach, which is sound and complete, using our prototype tool Hermes. Our evaluation indicates that Hermes performs significantly better than the state-of-the-art verification tools for multi-path MPI programs.

[1]  Yu Huang,et al.  Proving MCAPI executions are correct using SMT , 2013, 2013 28th IEEE/ACM International Conference on Automated Software Engineering (ASE).

[2]  Ganesh Gopalakrishnan,et al.  Efficient dynamic verification algorithms for mpi applications , 2010 .

[3]  R. Kirby,et al.  A Survey of MPI Related Debuggers and Tools ? , .

[4]  Stephen F. Siegel,et al.  Verification of MPI programs using CIVL , 2017, EuroMPI/USA.

[5]  George Candea,et al.  Parallel symbolic execution for automated real-world software testing , 2011, EuroSys '11.

[6]  Michael M. Resch,et al.  MARMOT: An MPI Analysis and Checking Tool , 2003, PARCO.

[7]  Anthony Skjellum,et al.  Using MPI - portable parallel programming with the message-parsing interface , 1994 .

[8]  Chao Wang,et al.  Trace-Based Symbolic Analysis for Atomicity Violations , 2010, TACAS.

[9]  Zhenbang Chen,et al.  Poster: Symbolic Execution of MPI Programs , 2015, 2015 IEEE/ACM 37th IEEE International Conference on Software Engineering.

[10]  Bronis R. de Supinski,et al.  Dynamic Software Testing of MPI Applications with Umpire , 2000, ACM/IEEE SC 2000 Conference (SC'00).

[11]  Jens Palsberg,et al.  Sherlock: scalable deadlock detection for concurrent programs , 2014, SIGSOFT FSE.

[12]  Anthony Skjellum,et al.  Portable Parallel Programming with the Message-Passing Interface , 1996 .

[13]  James Coyle,et al.  Deadlock detection in MPI programs , 2002, Concurr. Comput. Pract. Exp..

[14]  Chao Wang,et al.  Symbolic Predictive Analysis for Concurrent Programs , 2009, FM.

[15]  Aarti Gupta,et al.  DTAM: dynamic taint analysis of multi-threaded programs for relevancy , 2012, SIGSOFT FSE.

[16]  Wenguang Chen,et al.  MPIWiz: subgroup reproducible replay of mpi applications , 2009, PPoPP '09.

[17]  Zhenbang Chen,et al.  Symbolic execution of MPI programs , 2015, ICSE 2015.

[18]  Stephen F. Siegel Efficient Verification of Halting Properties for MPI Programs with Wildcard Receives , 2005, VMCAI.

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

[20]  Nobuko Yoshida,et al.  Protocol-based verification of message-passing parallel programs , 2015, OOPSLA.

[21]  Dawson R. Engler,et al.  KLEE: Unassisted and Automatic Generation of High-Coverage Tests for Complex Systems Programs , 2008, OSDI.

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

[23]  Zijiang Yang,et al.  CRI: Symbolic Debugger for MCAPI Applications , 2010, ATVA.

[24]  Ganesh Gopalakrishnan,et al.  Dynamic Verification of MPI Programs with Reductions in Presence of Split Operations and Relaxed Orderings , 2008, CAV.

[25]  Martin Schulz,et al.  A Scalable and Distributed Dynamic Formal Verifier for MPI Programs , 2010, 2010 ACM/IEEE International Conference for High Performance Computing, Networking, Storage and Analysis.

[26]  Koushik Sen,et al.  CUTE: a concolic unit testing engine for C , 2005, ESEC/FSE-13.

[27]  Yu Huang,et al.  Detecting MPI Zero Buffer Incompatibility by SMT Encoding , 2015, NFM.

[28]  Daniel Kroening,et al.  Precise Predictive Analysis for Discovering Communication Deadlocks in MPI Programs , 2014, FM.

[29]  Ganesh Narayanaswamy When truth is efficient: analysing concurrency , 2015, ISSTA.

[30]  Daniel Kroening,et al.  Partial Orders for Efficient Bounded Model Checking of Concurrent Software , 2013, CAV.

[31]  Stanislav Böhm,et al.  State-Space Reduction of Non-deterministically Synchronizing Systems Applicable to Deadlock Detection in MPI , 2016, FM.

[32]  Martin Schulz,et al.  Noise Injection Techniques to Expose Subtle and Unintended Message Races , 2017, PPOPP.

[33]  Francisco Martins,et al.  Towards deductive verification of MPI programs against session types , 2013, PLACES.

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

[35]  Ganesh Gopalakrishnan,et al.  Precise Dynamic Analysis for Slack Elasticity: Adding Buffering without Adding Bugs , 2010, EuroMPI.