Mpich-3 0 4-Userguide
Mpich-3 0 4-Userguide
Version 3.0.4
Mathematics and Computer Science Division
Argonne National Laboratory
Pavan Balaji
Wesley Bland
James Dinan
David Goodell
William Gropp
Rob Latham
Antonio Peña
Rajeev Thakur
Past Contributors:
David Ashton
Darius Buntinas
Ralph Butler
Anthony Chan
Jayesh Krishna
Ewing Lusk
Guillaume Mercier
Rob Ross
Brian Toonen
∗
This work was supported by the Mathematical, Information, and Computational Sci-
ences Division subprogram of the Office of Advanced Scientific Computing Research, Sci-
DAC Program, Office of Science, U.S. Department of Energy, under Contract DE-AC02-
06CH11357.
1
Contents
1 Introduction 1
3 Quick Start 2
6 Debugging 11
6.1 TotalView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
i
7 Checkpointing 12
7.1 Configuring for checkpointing . . . . . . . . . . . . . . . . . . 12
7.2 Taking checkpoints . . . . . . . . . . . . . . . . . . . . . . . . 13
ii
1 INTRODUCTION 1
1 Introduction
This manual assumes that MPICH has already been installed. For instruc-
tions on how to install MPICH, see the MPICH Installer’s Guide, or the
README in the top-level MPICH directory. This manual explains how to
compile, link, and run MPI applications, and use certain tools that come
with MPICH. This is a preliminary version and some sections are not com-
plete yet. However, there should be enough here to get you started with
MPICH.
MPICH1’s configure devoted some effort to finding the libraries that con-
tained the right versions of iargc and getarg and including those libraries
with which the mpif77 script linked MPI programs. Since MPICH does not
require access to command line arguments to applications, these functions
are optional, and configure does nothing special with them. If you need
them in your applications, you will have to ensure that they are available in
the Fortran environment you are using.
3 Quick Start
To use MPICH, you will have to know the directory where MPICH has been
installed. (Either you installed it there yourself, or your systems adminis-
trator has installed it. One place to look in this case might be /usr/local.
If MPICH has not yet been installed, see the MPICH Installer’s Guide.)
We suggest that you put the bin subdirectory of that directory into your
path. This will give you access to assorted MPICH commands to compile,
link, and run your programs conveniently. Other commands in this directory
manage parts of the run-time environment and execute tools.
One of the first commands you might run is mpichversion to find out
the exact version and configuration of MPICH you are working with. Some
of the material in this manual depends on just what version of MPICH you
are using and how it was configured at installation time.
You should now be able to run an MPI program. Let us assume that the
directory where MPICH has been installed is /home/you/mpich-installed,
and that you have added that directory to your path, using
export PATH=/home/you/mpich-installed/bin:$PATH
for bash or sh. Then to run an MPI program, albeit only on one machine,
you can do:
cd /home/you/mpich-installed/examples
mpiexec -n 3 ./cpi
4 COMPILING AND LINKING 3
Details for these commands are provided below, but if you can success-
fully execute them here, then you have a correctly installed MPICH and
have run an MPI program.
SEEK_SET is #defined but must not be for the C++ binding of MPI
The problem is that both stdio.h and the MPI C++ interface use SEEK SET,
SEEK CUR, and SEEK END. This is really a bug in the MPI standard. You can
try adding
#undef SEEK_SET
#undef SEEK_END
#undef SEEK_CUR
-DMPICH_IGNORE_CXX_SEEK
to the command line (this will cause the MPI versions of SEEK SET etc. to
be skipped).
MPICH provides two kinds of support for Fortran programs. For Fortran 77
programmers, the file mpif.h provides the definitions of the MPI constants
5 RUNNING PROGRAMS WITH MPIEXEC 4
such as MPI COMM WORLD. Fortran 90 programmers should use the MPI module
instead; this provides all of the definitions as well as interface definitions for
many of the MPI functions. However, this MPI module does not provide
full Fortran 90 support; in particular, interfaces for the routines, such as
MPI Send, that take “choice” arguments are not provided.
The MPI Standard describes mpiexec as a suggested way to run MPI pro-
grams. MPICH implements the mpiexec standard, and also provides some
extensions.
Here we describe the standard mpiexec arguments from the MPI Stan-
dard [1]. The simplest form of a command to start an MPI job is
to start the executable a.out with 32 processes (providing an MPI COMM WORLD
of size 32 inside the MPI application). Other options are supported, for
search paths for executables, working directories, and even a more general
way of specifying a number of processes. Multiple sets of processes can be
run with different executables and different values for their arguments, with
“:” separating the sets of processes, as in:
It is also possible to start a one process MPI job (with a MPI COMM WORLD
whose size is equal to 1), without using mpiexec. This process will become
an MPI process when it calls MPI Init, and it may then call other MPI func-
tions. Currently, MPICH does not fully support calling the dynamic process
routines from the MPI standard (e.g., MPI Comm spawn or MPI Comm accept)
from processes that are not started with mpiexec.
5 RUNNING PROGRAMS WITH MPIEXEC 5
SMPD is an alternate process manager that runs on both Unix and Win-
dows. It can launch jobs across both platforms if the binary formats match
(big/little endianness and size of C types– int, long, void*, etc).
mpiexec for smpd accepts the standard MPI mpiexec options. Execute
mpiexec
or
mpiexec -help2
mpiexec -n 10 myapp.exe
-n x
-np x
launch x processes
-localonly x
-np x -localonly
launch x processes on the local machine
-machinefile filename
use a file to list the names of machines to launch on
-host hostname
launch on the specified host.
-hosts n host1 host2 ... hostn
-hosts n host1 m1 host2 m2 ... hostn mn
launch on the specified hosts. In the second version the number of
processes = m1 + m2 + ... + mn
-dir drive:\my\working\directory
-wdir /my/working/directory
launch processes with the specified working directory. (-dir and -wdir
are equivalent)
-env var val
set environment variable before launching the processes
-exitcodes
print the process exit codes when each process exits.
-noprompt
prevent mpiexec from prompting for user credentials. Instead errors
will be printed and mpiexec will exit.
-localroot
launch the root process directly from mpiexec if the host is local. (This
allows the root process to create windows and be debugged.)
-port port
-p port
specify the port that smpd is listening on.
5 RUNNING PROGRAMS WITH MPIEXEC 7
-phrase passphrase
specify the passphrase to authenticate connections to smpd with.
-smpdfile filename
specify the file where the smpd options are stored including the passphrase.
(unix only option)
-timeout seconds
timeout for the job.
-map drive:\\host\share
map a drive on all the nodes this mapping will be removed when the
processes exit
-logon
prompt for user account and password
-pwdfile filename
read the account and password from the file specified.
put the account on the first line and the password on the second
-nopopup debug
disable the system popup dialog if the process crashes
-priority class[:level]
set the process startup priority class and optionally level.
class = 0,1,2,3,4 = idle, below, normal, above, high
level = 0,1,2,3,4,5 = idle, lowest, below, normal, above, highest
the default is -priority 2:3
-register
encrypt a user name and password to the Windows registry.
-remove
delete the encrypted credentials from the Windows registry.
-delegate
use passwordless delegation to launch processes.
-impersonate
use passwordless authentication to launch processes.
-plaintext
don’t encrypt the data on the wire.
-env <name> <value> Set the environment variable <name> to <value> for
the processes being run by mpiexec.
-genv options have the same meaning as their corresponding -env version,
except they apply to all executables, not just the current executable (in
the case that the colon syntax is used to specify multiple execuables).
-usize <n> Specify the value returned for the value of the attribute MPI UNIVERSE SIZE.
-l Label standard out and standard error (stdout and stderr) with the
rank of the process
MPIEXEC PORT RANGE Set the range of ports that mpiexec will use in com-
municating with the processes that it starts. The format of this is
<low>:<high>. For example, to specify any port between 10000 and
10100, use 10000:10100.
MPICH PORT RANGE Has the same meaning as MPIEXEC PORT RANGE and is
used if MPIEXEC PORT RANGE is not set.
MPIEXEC PREFIX STDOUT Set the prefix used for lines sent to standard out-
put. A %d is replaced with the rank in MPI COMM WORLD; a %w is re-
placed with an indication of which MPI COMM WORLD in MPI jobs that
involve multiple MPI COMM WORLDs (e.g., ones that use MPI Comm spawn
or MPI Comm connect).
MPIEXEC PREFIX STDERR Like MPIEXEC PREFIX STDOUT, but for standard er-
ror.
MPIEXEC STDOUTBUF Sets the buffering mode for standard output. Valid
values are NONE (no buffering), LINE (buffering by lines), and BLOCK
(buffering by blocks of characters; the size of the block is implemen-
tation defined). The default is NONE.
There are multiple ways of using MPICH with SLURM or PBS. Hydra
provides native support for both SLURM and PBS, and is likely the easiest
6 DEBUGGING 11
way to use MPICH on these systems (see the Hydra documentation above
for more details).
Alternatively, SLURM also provides compatibility with MPICH’s in-
ternal process management interface. To use this, you need to configure
MPICH with SLURM support, and then use the srun job launching utility
provided by SLURM.
For PBS, MPICH jobs can be launched in two ways: (i) use Hydra’s
mpiexec with the appropriate options corresponding to PBS, or (ii) using
the OSC mpiexec.
Pete Wyckoff from the Ohio Supercomputer Center provides a alternate util-
ity called OSC mpiexec to launch MPICH jobs on PBS systems. More infor-
mation about this can be found here: http://www.osc.edu/~pw/mpiexec
6 Debugging
6.1 TotalView
MPICH supports use of the TotalView debugger from Etnus. If MPICH has
been configured to enable debugging with TotalView then one can debug an
MPI program using
You will get a popup window from TotalView asking whether you want to
start the job in a stopped state. If so, when the TotalView window appears,
you may see assembly code in the source window. Click on main in the stack
window (upper left) to see the source of the main function. TotalView will
show that the program (all processes) are stopped in the call to MPI Init.
7 CHECKPOINTING 12
If you have TotalView 8.1.0 or later, you can use a TotalView feature
called indirect launch with MPICH. Invoke TotalView as:
7 Checkpointing
First, you need to have BLCR version 0.8.2 installed on your machine. If
it’s installed in the default system location, add the following two options
to your configure command:
--enable-checkpointing --with-hydra-ckpointlib=blcr
--enable-checkpointing --with-hydra-ckpointlib=blcr
--with-blcr=BLCR_INSTALL_DIR LD_LIBRARY_PATH=BLCR_INSTALL_DIR/lib
where BLCR INSTALL DIR is the directory where BLCR has been installed
(whatever was specified in --prefix when BLCR was configured). Note,
checkpointing is only supported with the Hydra process manager. Hyrda
7 CHECKPOINTING 13
will used by default, unless you choose something else with the --with-pm=
configure option.
After it’s configured, compile as usual (e.g., make; make install).
While the application is running, the user can request for a checkpoint at
any time by sending a SIGUSR1 signal to mpiexec. You can also automati-
cally checkpoint the application at regular intervals using the mpiexec option
-ckpoint-interval to specify the number of seconds between checkpoints:
Note that by default, the process will be restarted from the first check-
point, so in most cases, the checkpoint number should be specified.
8 OTHER TOOLS PROVIDED WITH MPICH 14
MPICH also includes a test suite for MPI functionality; this suite may be
found in the mpich/test/mpi source directory and can be run with the
command make testing. This test suite should work with any MPI imple-
mentation, not just MPICH.
9.1 Directories
9.2 Compiling
The libraries in the lib directory were compiled with MS Visual C++ .NET
2003 and Intel Fortran 8.1. These compilers and any others that can link
with the MS .lib files can be used to create user applications. gcc and g77
for cygwin can be used with the libmpich*.a libraries.
For MS Developer Studio users: Create a project and add
C:\Program Files\MPICH\include
C:\Program Files\MPICH\lib
to the library path. Add mpi.lib and cxx.lib to the link command. Add
cxxd.lib to the Debug target link instead of cxx.lib.
Intel Fortran 8 users should add fmpich.lib to the link command.
Cygwin users should use libmpich.a libfmpichg.a.
9 MPICH UNDER WINDOWS 15
9.3 Running
MPI jobs are run from a command prompt using mpiexec.exe. See Sec-
tion 5.4 on mpiexec for smpd for a description of the options to mpiexec.
A FREQUENTLY ASKED QUESTIONS 16
References