# MPI-2: Extensions to the Message-Passing Interface

Message Passing Interface Forum

<QUOTE>

This document describes the MPI-1.2 and MPI-2 standards. They are both extensions to the MPI-1.1 standard. The MPI-1.2 part of the document contains clarifications and corrections to the MPI-1.1 standard and defines MPI-1.2. The MPI-2 part of the document describes additions to the MPI-1 standard and defines MPI-2. These include miscellaneous topics, process creation and management, one-sided communications, extended collective operations, external interfaces, I/O, and additional language bindings.

</QUOTE>

(c) 1995, 1996, 1997 University of Tennessee, Knoxville, Tennessee. Permission to copy without fee all or part of this material is granted, provided the University of Tennessee copyright notice and the title of this document appear, and notice is given that copying is by permission of the University of Tennessee.

Acknowledgments

This document represents the work of many people who have served on the MPI Forum. The meetings have been attended by dozens of people from many parts of the world. It is the hard and dedicated work of this group that has led to the MPI standard.

The technical development was carried out by subgroups, whose work was reviewed by the full committee. During the period of development of the Message Passing Interface ( MPI-2), many people helped with this effort. Those who served as the primary coordinators are:

- Ewing Lusk, Convener and Meeting Chair
- Steve Huss-Lederman, Editor
- Ewing Lusk, Miscellany
- Bill Saphir, Process Creation and Management
- Marc Snir, One-Sided Communications
- Bill Gropp and Anthony Skjellum, Extended Collective Operations
- Steve Huss-Lederman, External Interfaces
- Bill Nitzberg, I/O
- Andrew Lumsdaine, Bill Saphir, and Jeff Squyres, Language Bindings
- Anthony Skjellum and Arkady Kanevsky, Real-Time

The following list includes some of the active participants who attended MPI-2 Forum meetings and are not mentioned above.

Greg Astfalk | Robert Babb | Ed Benson | Rajesh Bordawekar
Pete Bradley | Peter Brennan | Ron Brightwell | Maciej Brodowicz
Eric Brunner | Greg Burns | Margaret Cahir | Pang Chen
Ying Chen | Albert Cheng | Yong Cho | Joel Clark
Lyndon Clarke | Laurie Costello | Dennis Cottel | Jim Cownie
Zhenqian Cui | Suresh Damodaran-Kamal | Raja Daoud | Judith Devaney
David DiNucci | Doug Doefler | Jack Dongarra | Terry Dontje
Nathan Doss | Anne Elster | Mark Fallon | Karl Feind
Sam Fineberg | Craig Fischberg | Stephen Fleischman | Ian Foster
Hubertus Franke | Richard Frost | Al Geist | Robert George
David Greenberg | John Hagedorn | Kei Harada | Leslie Hart
Shane Hebert | Rolf Hempel | Tom Henderson | Alex Ho
Hans-Christian Hoppe | Joefon Jann | Terry Jones | Karl Kesselman
Koichi Konishi | Susan Kraus | Steve Kubica | Steve Landherr
Mario Lauria | Mark Law | Juan Leon | Lloyd Lewins
Ziyang Lu | Bob Madahar | Peter Madams | John May
Oliver McBryan | Brian McCandless | Tyce McLarty | Thom McMahon
Harish Nag | Nick Nevin | Jarek Nieplocha | Ron Oldfield
Peter Ossadnik | Steve Otto | Peter Pacheco | Yoonho Park
Perry Partow | Pratap Pattnaik | Elsie Pierce | Paul Pierce
Heidi Poxon | Jean-Pierre Prost | Boris Protopopov | James Pruyve
Rolf Rabenseifner | Joe Rieken | Peter Rigsbee | Tom Robey
Anna Rounbehler | Nobutoshi Sagawa | Arindam Saha | Eric Salo
Darren Sanders | Eric Sharakan | Andrew Sherman | Fred Shirley
Lance Shuler | A. Gordon Smith | Ian Stockdale | David Taylor
Stephen Taylor | Greg Tensa | Rajeev Thakur | Marydell Tholburn
Dick Treumann | Simon Tsang | Manuel Ujaldon | David Walker
Jerrell Watts | Klaus Wolf | Parkson Wong | Dave Wright

The MPI Forum also acknowledges and appreciates the valuable input from people via e-mail and in person.

The following institutions supported the MPI-2 effort through time and travel support for the people listed above.

Argonne National Laboratory
Bolt, Beranek, and Newman
California Institute of Technology
Center for Computing Sciences
Convex Computer Corporation
Cray Research
Digital Equipment Corporation
Dolphin Interconnect Solutions, Inc.
Edinburgh Parallel Computing Centre
General Electric Company
German National Research Center for Information Technology
Hewlett-Packard
Hitachi
Hughes Aircraft Company
Intel Corporation
International Business Machines
Khoral Research
Lawrence Livermore National Laboratory
Los Alamos National Laboratory
MPI Software Techology, Inc.
Mississippi State University
NEC Corporation
National Aeronautics and Space Administration
National Energy Research Scientific Computing Center
National Institute of Standards and Technology
National Oceanic and Atmospheric Adminstration
Oak Ridge National Laboratory
Ohio State University
PALLAS GmbH
Pacific Northwest National Laboratory
Pratt & Whitney
San Diego Supercomputer Center
Sanders, A Lockheed-Martin Company
Sandia National Laboratories
Schlumberger
Scientific Computing Associates, Inc.
Silicon Graphics Incorporated
Sky Computers
Sun Microsystems Computer Corporation
Syracuse University
The MITRE Corporation
Thinking Machines Corporation
United States Navy
University of Colorado
University of Denver
University of Houston
University of Illinois
University of Maryland
University of Notre Dame
University of San Fransisco
University of Stuttgart Computing Center
University of Wisconsin

MPI-2 operated on a very tight budget (in reality, it had no budget when the first meeting was announced). Many institutions helped the MPI-2 effort by supporting the efforts and travel of the members of the MPI Forum. Direct support was given by NSF and DARPA under NSF contract CDA-9115428 for travel by U.S. academic participants and Esprit under project HPC Standards (21111) for European participants.

# Contents

- Introduction to MPI-2
- Background
- Organization of this Document
- MPI-2 Terms and Conventions
- Document Notation
- Naming Conventions
- Procedure Specification
- Semantic Terms
- Data Types
- Opaque Objects
- Array Arguments
- State
- Named Constants
- Choice
- Addresses
- File Offsets
- Language Binding
- Deprecated Names and Functions
- Fortran Binding Issues
- C Binding Issues
- C++ Binding Issues
- Processes
- Error Handling
- Implementation Issues
- Independence of Basic Runtime Routines
- Interaction with Signals
- Examples
- Version 1.2 of MPI
- Version Number
- MPI-1.0 and MPI-1.1 Clarifications
- Clarification of MPI_INITIALIZED
- Clarification of MPI_FINALIZE
- Clarification of status after MPI_WAIT and MPI_TEST
- Clarification of MPI_INTERCOMM_CREATE
- Clarification of MPI_INTERCOMM_MERGE
- Clarification of Binding of MPI_TYPE_SIZE
- Clarification of MPI_REDUCE
- Clarification of Error Behavior of Attribute Callback Functions
- Clarification of MPI_PROBE and MPI_IPROBE
- Minor Corrections
- Miscellany
- Portable MPI Process Startup
- Passing NULL to MPI_Init
- Version Number
- Datatype Constructor MPI_TYPE_CREATE_INDEXED_BLOCK
- Treatment of MPI_Status
- Passing MPI_STATUS_IGNORE for Status
- Non-destructive Test of status
- Error Class for Invalid Keyval
- Committing a Committed Datatype
- Allowing User Functions at Process Termination
- Determining Whether MPI Has Finished
- The Info Object
- Memory Allocation
- Language Interoperability
- Introduction
- Assumptions
- Initialization
- Transfer of Handles
- Status
- MPI Opaque Objects
- Datatypes
- Callback Functions
- Error Handlers
- Reduce Operations
- Addresses
- Attributes
- Extra State
- Constants
- Interlanguage Communication
- Error Handlers
- Error Handlers for Communicators
- Error Handlers for Windows
- Error Handlers for Files
- New Datatype Manipulation Functions
- Type Constructors with Explicit Addresses
- Extent and Bounds of Datatypes
- True Extent of Datatypes
- Subarray Datatype Constructor
- Distributed Array Datatype Constructor
- New Predefined Datatypes
- Wide Characters
- Signed Characters and Reductions
- Unsigned long long Type
- Canonical MPI_PACK and MPI_UNPACK
- Functions and Macros
- Profiling Interface
- Process Creation and Management
- Introduction
- The MPI-2 Process Model
- Starting Processes
- The Runtime Environment
- Process Manager Interface
- Processes in MPI
- Starting Processes and Establishing Communication
- Starting Multiple Executables and Establishing Communication
- Reserved Keys
- Spawn Example
- Manager-worker Example, Using MPI_SPAWN.
- Establishing Communication
- Names, Addresses, Ports, and All That
- Server Routines
- Client Routines
- Name Publishing
- Reserved Key Values
- Client/Server Examples
- Simplest Example --- Completely Portable.
- Ocean/Atmosphere - Relies on Name Publishing
- Simple Client-Server Example.
- Other Functionality
- Universe Size
- Singleton MPI_INIT
- MPI_APPNUM
- Releasing Connections
- Another Way to Establish MPI Communication
- One-Sided Communications
- Introduction
- Initialization
- Window Creation
- Window Attributes
- Communication Calls
- Put
- Get
- Examples
- Accumulate Functions
- Synchronization Calls
- Fence
- General Active Target Synchronization
- Lock
- Assertions
- Miscellaneous Clarifications
- Examples
- Error Handling
- Error Handlers
- Error Classes
- Semantics and Correctness
- Atomicity
- Progress
- Registers and Compiler Optimizations
- Extended Collective Operations
- Introduction
- Intercommunicator Constructors
- Extended Collective Operations
- Intercommunicator Collective Operations
- Operations that Move Data
- Broadcast
- Gather
- Scatter
- ``All'' Forms and All-to-all
- Reductions
- Other Operations
- Generalized All-to-all Function
- Exclusive Scan
- External Interfaces
- Introduction
- Generalized Requests
- Examples
- Associating Information with Status
- Naming Objects
- Error Classes, Error Codes, and Error Handlers
- Decoding a Datatype
- MPI and Threads
- General
- Clarifications
- Initialization
- New Attribute Caching Functions
- Communicators
- Windows
- Datatypes
- Duplicating a Datatype
- I/O
- Introduction
- Definitions
- File Manipulation
- Opening a File
- Closing a File
- Deleting a File
- Resizing a File
- Preallocating Space for a File
- Querying the Size of a File
- Querying File Parameters
- File Info
- Reserved File Hints
- File Views
- Data Access
- Data Access Routines
- Positioning
- Synchronism
- Coordination
- Data Access Conventions
- Data Access with Explicit Offsets
- Data Access with Individual File Pointers
- Data Access with Shared File Pointers
- Noncollective Operations
- Collective Operations
- Seek
- Split Collective Data Access Routines
- File Interoperability
- Datatypes for File Interoperability
- External Data Representation: ``external32''
- User-Defined Data Representations
- Extent Callback
- Datarep Conversion Functions
- Matching Data Representations
- Consistency and Semantics
- File Consistency
- Random Access vs. Sequential Files
- Progress
- Collective File Operations
- Type Matching
- Miscellaneous Clarifications
- MPI_Offset Type
- Logical vs. Physical File Layout
- File Size
- Examples
- Asynchronous I/O
- I/O Error Handling
- I/O Error Classes
- Examples
- Double Buffering with Split Collective I/O
- Subarray Filetype Constructor
- Language Bindings
- C++
- Overview
- Design
- C++ Classes for MPI
- Class Member Functions for MPI
- Semantics
- C++ Datatypes
- Communicators
- Exceptions
- Mixed-Language Operability
- Profiling
- Fortran Support
- Overview
- Problems With Fortran Bindings for MPI
- Problems Due to Strong Typing
- Problems Due to Data Copying and Sequence Association
- Special Constants
- Fortran 90 Derived Types
- A Problem with Register Optimization
- Basic Fortran Support
- Extended Fortran Support
- The `mpi` Module
- No Type Mismatch Problems for Subroutines with Choice Arguments
- Additional Support for Fortran Numeric Intrinsic Types
- Parameterized Datatypes with Specified Precision and Exponent Range
- Support for Size-specific MPI Datatypes
- Communication With Size-specific Types
- Bibliography
- Language Binding
- Introduction
- Defined Values and Handles
- Defined Constants
- Info Keys
- Info Values
- MPI-1.2 C Bindings
- MPI-1.2 Fortran Bindings
- MPI-1.2 C++ Bindings
- MPI-2 C Bindings
- Miscellany
- Process Creation and Management
- One-Sided Communications
- Extended Collective Operations
- External Interfaces
- I/O
- Language Bindings
- User Defined Functions
- MPI-2 Fortran Bindings
- Miscellany
- Process Creation and Management
- One-Sided Communications
- Extended Collective Operations
- External Interfaces
- I/O
- Language Bindings
- User Defined Subroutines
- MPI-2 C++ Bindings
- Miscellany
- Process Creation and Management
- One-Sided Communications
- Extended Collective Operations
- External Interfaces
- I/O
- Language Bindings
- User Defined Functions
- MPI-1 C++ Language Binding
- C++ Classes
- Defined Constants
- Typedefs
- C++ Bindings for Point-to-Point Communication
- C++ Bindings for Collective Communication
- C++ Bindings for Groups, Contexts, and Communicators
- C++ Bindings for Process Topologies
- C++ Bindings for Environmental Inquiry
- C++ Bindings for Profiling
- C++ Bindings for Status Access
- C++ Bindings for New 1.2 Functions
- C++ Bindings for Exceptions
- C++ Bindings on all MPI Classes
- Construction / Destruction
- Copy / Assignment
- Comparison
- Inter-language Operability
- Function Name Cross Reference
- Index

  Return to MPI-2 Standard Index
  Return to MPI 1.1 Standard Index
  Return to MPI Forum Home Page

  MPI-2.0 of July 18, 1997
  HTML Generated on September 10, 2001