NOTE This page is currently under development.

Introduction

MUST detects usage errors of the Message Passing Interface (MPI) and reports them to the user. As MPI calls are complex and usage errors common, this functionality is extremely helpful for application developers that want to develop correct MPI applications. This includes errors that already manifest—segmentation faults or incorrect results—as well as many errors that are not visible to the application developer or do not manifest on a certain system or MPI implementation.

To detect errors, MUST intercepts the MPI calls that are issued by the target application and evaluates their arguments. The two main usage scenarios for MUST arise during application development and when porting an existing application to a new system. When a developer adds new MPI communication calls, MUST can detect newly introduced errors, especially also some that may not manifest in an application crash. Further, before porting an application to a new system, MUST can detect violations to the MPI standard that might manifest on the target system. MUST reports errors in a log file that can be investigated once the execution of the target executable finishes.

MUST provides correctness checks for the following classes of errors:

  • Constants and integer values
  • Communicator usage
  • Datatype usage
  • Group usage
  • Operation Usage
  • Request usage
  • Leak checks (MPI resources not freed before calling MPI Finalize)
  • Type mis-matches
  • Overlapping buffers passed to MPI
  • Deadlocks resulting from MPI calls
  • Basic checks for thread level usage (MPI_Init_thread)

MUST stands for "Marmot Umpire Scalable Tool," being named after the two previous generation MPI correctness tools which it developed from.