Protocol-based verification of message-passing parallel programs

We present ParTypes, a type-based methodology for the verification of Message Passing Interface (MPI) programs written in the C programming language. The aim is to statically verify programs against protocol specifications, enforcing properties such as fidelity and absence of deadlocks. We develop a protocol language based on a dependent type system for message-passing parallel programs, which includes various communication operators, such as point-to-point messages, broadcast, reduce, array scatter and gather. For the verification of a program against a given protocol, the protocol is first translated into a representation read by VCC, a software verifier for C. We successfully verified several MPI programs in a running time that is independent of the number of processes or other input parameters. This contrasts with alternative techniques, notably model checking and runtime verification, that suffer from the state-explosion problem or that otherwise depend on parameters to the program itself. We experimentally evaluated our approach against state-of-the-art tools for MPI to conclude that our approach offers a scalable solution.

[1]  Peter S. Pacheco Parallel programming with MPI , 1996 .

[2]  Nobuko Yoshida,et al.  Protocols by Default - Safe MPI Code Generation Based on Session Types , 2015, CC.

[3]  Nobuko Yoshida,et al.  Parameterised Multiparty Session Types , 2010, Log. Methods Comput. Sci..

[4]  Gary Brown,et al.  Scribbling Interactions with a Formal Foundation , 2011, ICDCIT.

[5]  Hongwei Xi,et al.  Imperative programming with dependent types , 2000, Proceedings Fifteenth Annual IEEE Symposium on Logic in Computer Science (Cat. No.99CB36332).

[6]  SchulzMartin,et al.  Formal analysis of MPI-based parallel programs , 2011 .

[7]  T. Coquand An algorithm for testing conversion in type theory , 1991 .

[8]  Mark A. Hillebrand,et al.  VCC: A Practical System for Verifying Concurrent C , 2009, TPHOLs.

[9]  Nobuko Yoshida,et al.  Pabble: parameterised Scribble , 2015, Service Oriented Computing and Applications.

[10]  Andrew D. Gordon,et al.  Principles and Applications of Refinement Types , 2010, Logics and Languages for Reliability and Security.

[11]  Filipe Emanuel Ventura Pires de Matos Lemos,et al.  Synthesis of correct-by-construction MPI programs , 2014 .

[12]  Ian T. Foster,et al.  Designing and building parallel programs - concepts and tools for parallel software engineering , 1995 .

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

[14]  Peter Dybjer,et al.  Intuitionistic Type Theory , 2016 .

[15]  Nobuko Yoshida,et al.  Multiparty Session C: Safe Parallel Programming with Message Optimisation , 2012, TOOLS.

[16]  Martin Schulz,et al.  A Flexible and Dynamic Infrastructure for MPI Tool Interoperability , 2006, 2006 International Conference on Parallel Processing (ICPP'06).

[17]  Martin Schulz,et al.  MPI runtime error detection with MUST: Advances in deadlock detection , 2012, 2012 International Conference for High Performance Computing, Networking, Storage and Analysis.

[18]  Ian Foster,et al.  Designing and building parallel programs , 1994 .

[19]  Nathan Mishra-Linger,et al.  Programming in Omega , 2008, CEFP.

[20]  Stephen F. Siegel,et al.  Loop Invariant Symbolic Execution for Parallel Programs , 2012, VMCAI.

[21]  Stephen F. Siegel,et al.  Analyzing BlobFlow: A Case Study Using Model Checking to Verify Parallel Scientific Software , 2008, PVM/MPI.

[22]  Frank Pfenning,et al.  Logical Frameworks , 2001, Handbook of Automated Reasoning.

[23]  Nobuko Yoshida,et al.  Multiparty asynchronous session types , 2008, POPL '08.

[24]  Roland Meyer,et al.  Checking pi-Calculus Structural Congruence is Graph Isomorphism Complete , 2009, 2009 Ninth International Conference on Application of Concurrency to System Design.

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

[26]  Dimitrios Kouzapas,et al.  Session Types for Broadcasting , 2014, PLACES.

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

[28]  Nobuko Yoshida,et al.  The Scribble Protocol Language , 2013, TGC.

[29]  Patrick Maxim Rondon,et al.  Liquid types , 2008, PLDI '08.

[30]  Rajeev Thakur,et al.  Practical Model-Checking Method for Verifying Correctness of MPI Programs , 2007, PVM/MPI.

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

[32]  Francisco Martins,et al.  Deductive Verification of Parallel Programs Using Why3 , 2015, ICE.

[33]  Frank Pfenning,et al.  Higher-order abstract syntax , 1988, PLDI '88.

[34]  Frank Pfenning,et al.  Dependent types in practical programming , 1999, POPL '99.

[35]  Nobuko Yoshida,et al.  Verification of MPI Programs Using Session Types , 2012, EuroMPI.

[36]  Ganesh Gopalakrishnan,et al.  Hybrid approach for data-flow analysis of MPI programs , 2013, ICS '13.

[37]  Nobuko Yoshida,et al.  Structuring Communication with Session Types , 2014, Concurrent Objects and Beyond.

[38]  Martin Schulz,et al.  MPI runtime error detection with MUST: Advances in deadlock detection , 2012, 2012 International Conference for High Performance Computing, Networking, Storage and Analysis.

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

[40]  Anthony Skjellum,et al.  A High-Performance, Portable Implementation of the MPI Message Passing Interface Standard , 1996, Parallel Comput..

[41]  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.

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

[43]  Christina Freytag,et al.  Using Mpi Portable Parallel Programming With The Message Passing Interface , 2016 .

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

[45]  Lieven Eeckhout,et al.  Statistically rigorous java performance evaluation , 2007, OOPSLA.

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

[47]  William Gropp,et al.  Skjellum using mpi: portable parallel programming with the message-passing interface , 1994 .