MPICH2

MPICH2 is an implementation of the ​​Message-Passing Interface​​​ (MPI). The goals of MPICH2 are to provide an MPI implementation for important platforms, including clusters, SMPs, and massively parallel processors. It also provides a vehicle for MPI implementation research and for developing new and better parallel programming environments (see the ​​list of available student projects​​). MPICH2 was awarded an ​​R&D100 award​​ in 2005.

The current version of MPICH2 is 1.0.5p4, released on December 13, 2006, patch 4 March 30, 2007. (The latest patch release has some minor changes for MPICH2 to work better with the TotalView debugger.) MPICH2 replaces ​​MPICH1​​ and should be used instead of MPICH1 except for the case of clusters with heterogeneous data representations (e.g., different lengths for integers or different byte ordering). MPICH2 does not yet support those systems (support is planned for 2007).

MPICH2 is distributed as source (with an open-source, freely available ​​license​​​). It has been tested on several platforms, including Linux (on IA32 and x86-64), Mac OS/X (PowerPC and Intel), Solaris (32- and 64-bit), and Windows. Please see the ​​README​​​, ​​CHANGES​​​, and ​​RELEASE_NOTES​​ files in the distribution for more details.

For MPICH2-based MPI implementations on other networks and platforms, such as InfiniBand and Windows, see ​​Related Projects​​ below.


Download MPICH2

MPICH2 is provided in source form as a single, gzip'ed tar file. This is a unified source distribution, and may be used for both UNIX and Microsoft Windows. Binary distributions for Microsoft Windows are also provided.


All (source)

mpich2-1.0.5p4.tar.gz

​http​

ftp

12.8 MB

1.0.5p4

Win32 IA32

mpich2-1.0.5p2-win32-ia32.msi

​http​

ftp

8 MB

1.0.5p2

Win64 EM64T/AMD64

mpich2-1.0.5p2-win64-x86-64.zip

​http​

ftp

6.4 MB

1.0.5p2

Win64 IA64

mpich2-1.0.3-1-win64-ia64.zip

​http​

ftp

12.1 MB

1.0.3

In addition to the distributions provided by the MPICH2 Development Team, distributions of MPICH2 for other operating systems and packing environments are available below. Many thanks go out to those individuals who have graciously contributed their time and energy to create these distributions.


Debian

Zach Lowry

zach@zachlowry.net

​http​

1.0.3

FreeBSD

Thierry Thomas

thierry@FreeBSD.org

​http (info)​

1.0.4

Slackware

Marcelo Souza

marcelo@cebacad.net

​http (info)​

1.0.4p1

Fedora

Deji Akingunola

dakingun@gmail.com

​http (info)​

1.0.4p1


Documentation

User's Guide

N/A

N/A

​http​

ftp

Installer's Guide

N/A

N/A

​http​

ftp

Windows Developer's Guide

N/A

N/A

​http​

ftp

README

​http​

ftp

N/A

N/A

CHANGES

​http​

ftp

N/A

N/A

RELEASE_NOTES

​http​

ftp

N/A

N/A

Change Summary

​http​

N/A

N/A

N/A

Help on Installing and Using MPICH2

If you have trouble installing or using MPICH2, first see the ​​FAQ page​​​. If you have trouble with the Windows version of MPICH2, see the ​​tips for installing and running MPICH2 on Windows​​​ provided by a user, Brent Paul, or see the ​​MPICH2 Windows Development Guide​​​. If you still have any questions, comments, or difficulties, please contact us at ​​mpich2-maint@mcs.anl.gov​​.

An ​​MPICH mailing list​​ is available for discussion of the MPICH implementation of MPI.

Information for Developers

​Information for developers​​, including the state of the current development version and information on the tools and procedures used to manage MPICH2 development.

Related Projects

Two goals of MPICH2 are to enable research into MPI implementations and to encourage the development of MPI implementations for other platforms. Some of these projects are listed below. Vendor MPIs Various vendor MPIs are derived from MPICH2. Examples include IBM's MPI for the BG/L, Cray's MPI for the Red Storm and XT-3, Microsoft MPI, and Intel MPI. MVAPICH2 for InfiniBand ​​MVAPICH2 ​​​is a high performance implementation of MPICH2 for the InfiniBand interconnect. This implementation is developed at the Ohio State University. MPICH2 over SCTP Brad Penoff and Mike Tsai from the University of British Columbia have developed an implementation of MPICH2 over SCTP. (SCTP is a message-oriented reliable transport protocol recently standardized by the IETF and designed to bridge the gap between UDP and TCP.) Their implementation, an SCTP channel for MPICH2's ch3 device, is included in the MPICH2 1.0.5 release. Further information on their work is available ​​here​​.

Another implementation of MPICH2 (1.0.3) over SCTP was developed at Università degli Studi del Molise in Italy. Information on their work is available ​​here​​.

DeinoMPI for Windows ​​DeinoMPI​​​ is an implementation of MPI-2 for Microsoft Windows. It is derived from MPICH2 1.0.4. Chemnitz InfiniBand ​​MPICH2-CH3 Device for InfiniBand​​​ is based on the Verbs interface, currently using the Mellanox Verbs implementation VAPI. This implementation is developed at Technische Universität Chemnitz. ATOLL ​​ATOLL​​ is a high-performance interconnect and has an MPI based on MPICH2.


Information for Developers

Getting and building MPICH2

Testing MPICH

Interfacing to MPICH2 This section contains information on interfacing to MPICH2, either with external tools such as debuggers and process managers, or by replacing functions within the MPI implmentation, such as specifying a different implementation of an MPI collective operation.

Miscellaneous


Checking out the MPICH2 source

To checkout a new copy of the MPICH2 source on systems with access to the MCS filesystems, use

cvs -d /home/MPI/cvsMaster co mpich2all

(If you have trouble with the ​​confdb​​​ module within MPICH2, checkout ​​mpich2allnoconfdb​​​ instead of ​​mpich2all​​). From external sites (including machines within MCS that do not mount the division file systems), use

setenv CVS_RSH ssh cvs -d :ext:shakey:/home/MPI/cvsMaster co mpich2all

To checkout a particular release, specify the release name on the checkout:

cvs -d /home/MPI/cvsMaster co -r MPICH2_1_0 mpich2all

Note that checking out a particular release name creates a branch (see ​​Managing and Using Branches​​).

Setting up the build environment

The CVS repository does not contain any of the "derived" files, including the ​​configure​​ scripts and the C++ and Fortran 77 language bindings. To build these, run

maint/updatefiles

Occasionally changes are made to the autoconf macros that are not detected by the dependency tests for the ​​configure​​​ scripts. It is always correct to delete all of the ​​configure​​​ scripts before running ​​maint/updatefiles​​:

find . -name configure -print | xargs rm maint/updatefiles

The autoconf macros and the ​​configure.in​​ scripts now require autoconf version 2.59. This was done because there are incompatible differences between each minor release of autoconf (even the allowed command line arguments has changed between 2.50 and 2.58).

You can select a particular version of ​​autoconf​​​ and ​​autoheader​​​ by using the environment variables ​​AUTOCONF​​​ and ​​AUTOHEADER​​​ respectively. ​​maint/updatefiles​​ will use these if they are set.

Enabling automatic handling of file dependencies

Under certain circumstances, the build system will automatically maintain dependency information, ensuring that changes to a header file, for example, forces the recompilation of all files that include that header file. The requirements are


  • The C compiler is ​​gcc​​, and
  • Dependencies are enabled when ​​simplemake​​​ was run by ​​maint/updatefiles​​ (this is the default for the development version but not the a release distribution).

To enable the dependencies, simply run

make dependencies

after the ​​configure​​​ step. This will enable dependency handling for the parts of MPICH2 that use ​​simplemake​​​ (e.g., ​​src/mpi​​​, ​​src/mpid​​​, and some parts of ​​src/util​​). Other parts of MPICH2, such as ROMIO, do not currently support automatic dependency handling.

Updated derived files such as configure

If you change one of the files that is the source for a derived file, such as a ​​configure.in​​​ file, you will need to rebuild the derived file (e.g., the corresponding ​​configure​​​ file). The safest way to do this is to rerun ​​updatefiles​​:

maint/updatefiles

(from the top-level MPICH2 directory). However, this can take a fair amount of time. You can direct ​​updatefiles​​​ to only update certain classes of files. For example, to update all ​​configure​​ files, use

maint/updatefiles -do=build_configure

You can use multiple ​​-do​​​ arguments. For example, to rebuild the ​​Makefile.in​​​ files and the ​​configure​​ files, use

maint/updatefiles -do=build_configure -do=makefiles

Check the source of ​​maint/updatefiles​​​ to see what other options are available for ​​-do​​.

Updating the MPICH2 Web Pages

The MPICH2 web site is managed under CVS. To update the web site, first checkout the ​​mpich2-web​​ module:

cvs -d /home/MPI/cvsMaster co mpich2-web

To maintain a uniform look to the web pages, including the menu sidebars, each web page is created from a text file. For example, the main page is created from ​​m.txt​​​. This page created from ​​developer.txt​​​. To make the web pages, simply execute ​​make​​. To test the pages, use

make test-pages

which will install the pages into the directory ​​testhome​​. To install the pages into the MCS web site, use

make install

To add a new page, look at the ​​Makefile​​​ and add the necessary commands. Make sure that the ​​DIRS​​​ and ​​MAINPAGES​​ variables list the source directory and files.

Updating the MPICH2 FAQ Pages

The MPICH2 FAQ is maintained from a single file, ​​faq.txt​​​, in the directory ​​mpich2/docs/faq​​​. This source file uses a simplified form of LaTeX for formatting; the script ​​faqbuild​​​, which is run by using ​​make​​​ in the ​​docs/faq​​​ directory, will build three forms of the FAQ: HTML A single file, ​​faq.htm​​​, which is copied to the MPICH2 web site with ​​make install-web​​​ Text A collection of files, all with extension ​​.txt​​​, that contain one FAQ item. These may be used with the REQ system LaTeX A single file, ​​faq.tex​​, which is normally processed to produce a PDF file.