Blame doc/installguide/install.tex.vin

Packit Service c5cf8c
% -*- Mode: latex; -*-
Packit Service c5cf8c
\documentclass[dvipdfm,11pt]{article}
Packit Service c5cf8c
\usepackage[dvipdfm]{hyperref} % Upgraded url package
Packit Service c5cf8c
\parskip=.1in
Packit Service c5cf8c
Packit Service c5cf8c
% Formatting conventions for contributors
Packit Service c5cf8c
% 
Packit Service c5cf8c
% A quoting mechanism is needed to set off things like file names, command
Packit Service c5cf8c
% names, code fragments, and other strings that would confuse the flow of
Packit Service c5cf8c
% text if left undistinguished from preceding and following text.  In this
Packit Service c5cf8c
% document we use the LaTeX macro '\texttt' to indicate such text in the
Packit Service c5cf8c
% source, which normally produces, when used as in '\texttt{special text}',
Packit Service c5cf8c
% the typewriter font.
Packit Service c5cf8c
Packit Service c5cf8c
% It is particularly easy to use this convention if one is using emacs as
Packit Service c5cf8c
% the editor and LaTeX mode within emacs for editing LaTeX documents.  In
Packit Service c5cf8c
% such a case the key sequence ^C^F^T (hold down the control key and type
Packit Service c5cf8c
% 'cft') produces '\texttt{}' with the cursor positioned between the
Packit Service c5cf8c
% braces, ready for the special text to be typed.  The closing brace can
Packit Service c5cf8c
% be skipped over by typing ^e (go to the end of the line) if entering
Packit Service c5cf8c
% text or ^C-} to just move the cursor past the brace.
Packit Service c5cf8c
Packit Service c5cf8c
% LaTeX mode is usually loaded automatically.  At Argonne, one way to 
Packit Service c5cf8c
% get several useful emacs tools working for you automatically is to put
Packit Service c5cf8c
% the following in your .emacs file.
Packit Service c5cf8c
Packit Service c5cf8c
% (require 'tex-site)
Packit Service c5cf8c
% (setq LaTeX-mode-hook '(lambda ()
Packit Service c5cf8c
%                        (auto-fill-mode 1)
Packit Service c5cf8c
%                        (flyspell-mode 1)
Packit Service c5cf8c
%                        (reftex-mode 1)
Packit Service c5cf8c
%                        (setq TeX-command "latex")))
Packit Service c5cf8c
Packit Service c5cf8c
%
Packit Service c5cf8c
% When updating the version number of MPICH, make sure that you change *all*
Packit Service c5cf8c
% instances of the version.  Search for mpich- and check each match.  Some
Packit Service c5cf8c
% are within a verbatim statement and will need to be changed for each update.
Packit Service c5cf8c
%
Packit Service c5cf8c
Packit Service c5cf8c
\begin{document}
Packit Service c5cf8c
\markright{MPICH Installer's Guide}
Packit Service c5cf8c
\title{{\bf MPICH Installer's Guide}\thanks{This work was supported by the
Packit Service c5cf8c
    Mathematical, Information, and Computational Sciences Division
Packit Service c5cf8c
    subprogram of the Office of Advanced Scientific Computing Research,
Packit Service c5cf8c
    SciDAC Program, Office of Science, U.S. Department of Energy, under
Packit Service c5cf8c
    Contract DE-AC02-06CH11357.}\\
Packit Service c5cf8c
  Version %MPICH_VERSION%\\
Packit Service c5cf8c
  Mathematics and Computer Science Division\\
Packit Service c5cf8c
  Argonne National Laboratory}
Packit Service c5cf8c
Packit Service c5cf8c
\author{
Packit Service c5cf8c
Abdelhalim Amer \and Pavan Balaji \and Wesley Bland \and William Gropp \and
Packit Service c5cf8c
Yanfei Guo \and Rob Latham \and Huiwei Lu \and Lena Oden \and Antonio J. Pe\~na
Packit Service c5cf8c
\and Ken Raffenetti \and Sangmin Seo \and Min Si \and Rajeev Thakur \and
Packit Service c5cf8c
Junchao Zhang \and Xin Zhao
Packit Service c5cf8c
}
Packit Service c5cf8c
Packit Service c5cf8c
\maketitle
Packit Service c5cf8c
\cleardoublepage
Packit Service c5cf8c
Packit Service c5cf8c
\pagenumbering{roman}
Packit Service c5cf8c
\tableofcontents
Packit Service c5cf8c
\clearpage
Packit Service c5cf8c
Packit Service c5cf8c
\pagenumbering{arabic}
Packit Service c5cf8c
\pagestyle{headings}
Packit Service c5cf8c
Packit Service c5cf8c
%% Here is a basic outline for the document.   (Bill's original outline)
Packit Service c5cf8c
Packit Service c5cf8c
%% 0. Quick start with ``best practices''.  Each step has a reference to
Packit Service c5cf8c
%% more detailed information later in the document.
Packit Service c5cf8c
%% 1. Acquiring and unpacking.  Using a ``fast'' directory location and
Packit Service c5cf8c
%%    VPATH
Packit Service c5cf8c
%% 1a. Reporting problems
Packit Service c5cf8c
%% 2. Choosing a device (defer a detailed discussion of each until later)
Packit Service c5cf8c
%% 3. configure, make, and install.  Always use --prefix 
Packit Service c5cf8c
%% show only basic options for configure
Packit Service c5cf8c
%%    3a. Optional include of device-specific information
Packit Service c5cf8c
%%    3b. Optional include of pm-specific information
Packit Service c5cf8c
%%    3c. Optional ``fast'' version
Packit Service c5cf8c
%%    3d. Shared libraries
Packit Service c5cf8c
%% 4. Testing and benchmarking
Packit Service c5cf8c
%% 4a. make testing
Packit Service c5cf8c
%% 4b. Getting, building, and using mpptest and netpipe
Packit Service c5cf8c
%% 5. Special options
Packit Service c5cf8c
%% 6. Troubleshooting
Packit Service c5cf8c
%% Appendix:
Packit Service c5cf8c
%% A. Summary of configure options (particularly the enable and with options)
Packit Service c5cf8c
Packit Service c5cf8c
Packit Service c5cf8c
\section{Introduction}
Packit Service c5cf8c
\label{sec:intro}
Packit Service c5cf8c
This manual describes how to obtain and install MPICH, the MPI
Packit Service c5cf8c
implementation from Argonne National Laboratory.  (Of course, if you are
Packit Service c5cf8c
reading this, chances are good that you have already obtained it and
Packit Service c5cf8c
found this document, among others, in its \texttt{doc} subdirectory.)
Packit Service c5cf8c
This \emph{Guide} will explain how to install MPICH so that you and others can use it to
Packit Service c5cf8c
run MPI applications.  Some particular features are different
Packit Service c5cf8c
if you have system administration privileges (can become ``root'' on a
Packit Service c5cf8c
Unix system), and these are explained here.  It is not necessary to have
Packit Service c5cf8c
such privileges to build and install MPICH.  In the event of problems,
Packit Service c5cf8c
send mail to \texttt{discuss@mpich.org}.  Once MPICH is
Packit Service c5cf8c
installed, details on how to run MPI jobs are covered in the \emph{MPICH
Packit Service c5cf8c
User's Guide}, found in this same \texttt{doc} subdirectory.
Packit Service c5cf8c
Packit Service c5cf8c
MPICH has many options.  We will first go through a recommended,
Packit Service c5cf8c
``standard'' installation in a step-by-step fashion, and later describe
Packit Service c5cf8c
alternative possibilities. 
Packit Service c5cf8c
Packit Service c5cf8c
Packit Service c5cf8c
\section{Quick Start}
Packit Service c5cf8c
\label{sec:quick}
Packit Service c5cf8c
Packit Service c5cf8c
In this section we describe a ``default'' set of installation steps.
Packit Service c5cf8c
It uses the default set of configuration options, which builds the
Packit Service c5cf8c
\texttt{nemesis} communication device and the \texttt{Hydra} process
Packit Service c5cf8c
manager, for languages C, C++, Fortran-77, and Fortran-90 (if those
Packit Service c5cf8c
compilers exist), with compilers chosen automatically from the user's
Packit Service c5cf8c
environment, without tracing and debugging options.  It uses the
Packit Service c5cf8c
\texttt{VPATH} feature of \texttt{make}, so that the build process can
Packit Service c5cf8c
take place on a local disk for speed.
Packit Service c5cf8c
Packit Service c5cf8c
\subsection{Prerequisites}
Packit Service c5cf8c
\label{sec:prerequisites}
Packit Service c5cf8c
Packit Service c5cf8c
For the default installation, you will need:
Packit Service c5cf8c
\begin{enumerate}
Packit Service c5cf8c
\item A copy of the distribution, \texttt{mpich.tar.gz}.
Packit Service c5cf8c
\item A C compiler.
Packit Service c5cf8c
\item A Fortran-77, Fortran-90, and/or C++ compiler if you wish to write
Packit Service c5cf8c
  MPI programs in any of these languages.
Packit Service c5cf8c
\item Any one of a number of Unix operating systems, such as IA32-Linux.
Packit Service c5cf8c
  MPICH is most extensively tested on Linux;  there remain some
Packit Service c5cf8c
  difficulties on systems to which we do not currently have access.  Our
Packit Service c5cf8c
  \texttt{configure} script attempts to adapt MPICH to new systems. 
Packit Service c5cf8c
\end{enumerate}
Packit Service c5cf8c
Configure will check for these prerequisites and try to work around
Packit Service c5cf8c
deficiencies if possible.  (If you don't have Fortran, you will
Packit Service c5cf8c
still be able to use MPICH, just not with Fortran applications.)
Packit Service c5cf8c
Packit Service c5cf8c
Packit Service c5cf8c
\subsection{From A Standing Start to Running an MPI Program}
Packit Service c5cf8c
\label{sec:steps}
Packit Service c5cf8c
Here are the steps from obtaining MPICH through running your own
Packit Service c5cf8c
parallel program on multiple machines.
Packit Service c5cf8c
Packit Service c5cf8c
\begin{enumerate}
Packit Service c5cf8c
\item 
Packit Service c5cf8c
Unpack the tar file.
Packit Service c5cf8c
\begin{verbatim}
Packit Service c5cf8c
    tar xfz mpich.tar.gz
Packit Service c5cf8c
\end{verbatim}
Packit Service c5cf8c
If your tar doesn't accept the z option, use
Packit Service c5cf8c
\begin{verbatim}
Packit Service c5cf8c
    gunzip -c mpich.tar.gz | tar xf -
Packit Service c5cf8c
\end{verbatim}
Packit Service c5cf8c
Let us assume that the directory where you do this is
Packit Service c5cf8c
\texttt{/home/you/libraries}.  It will now contain a subdirectory named
Packit Service c5cf8c
\texttt{mpich-%MPICH_VERSION%}.
Packit Service c5cf8c
Packit Service c5cf8c
\item
Packit Service c5cf8c
Choose an installation directory (the default is \texttt{/usr/local/bin)}:
Packit Service c5cf8c
\begin{verbatim}
Packit Service c5cf8c
    mkdir /home/you/mpich-install
Packit Service c5cf8c
\end{verbatim}
Packit Service c5cf8c
It will be most convenient if this directory is shared by all of the
Packit Service c5cf8c
machines where you intend to run processes.  If not, you will have
Packit Service c5cf8c
to duplicate it on the other machines after installation.  Actually, if
Packit Service c5cf8c
you leave out this step, the next step will create the directory for you.
Packit Service c5cf8c
Packit Service c5cf8c
\item
Packit Service c5cf8c
Choose a build directory.  Building will proceed \emph{much} faster if
Packit Service c5cf8c
your build directory is on a file system local to the machine on which
Packit Service c5cf8c
the configuration and compilation steps are executed.  It is preferable
Packit Service c5cf8c
that this also be separate from the source directory, so that the
Packit Service c5cf8c
source directories remain
Packit Service c5cf8c
clean and can be reused to build other copies on other machines.
Packit Service c5cf8c
\begin{verbatim}
Packit Service c5cf8c
    mkdir /tmp/you/mpich-%MPICH_VERSION%
Packit Service c5cf8c
\end{verbatim}
Packit Service c5cf8c
Packit Service c5cf8c
\item
Packit Service c5cf8c
Choose any configure options.  See
Packit Service c5cf8c
Section~\ref{sec:important-configure-options} for a description of the most
Packit Service c5cf8c
important options to consider.  
Packit Service c5cf8c
Packit Service c5cf8c
\item
Packit Service c5cf8c
Configure MPICH, specifying the installation directory, and running
Packit Service c5cf8c
the \texttt{configure} script in the source directory:
Packit Service c5cf8c
\begin{verbatim}
Packit Service c5cf8c
    cd  /tmp/you/mpich-%MPICH_VERSION%
Packit Service c5cf8c
    /home/you/libraries/mpich-%MPICH_VERSION%/configure \
Packit Service c5cf8c
            -prefix=/home/you/mpich-install |& tee c.txt
Packit Service c5cf8c
\end{verbatim}
Packit Service c5cf8c
where the \texttt{$\backslash$} means that this is really one line.  (On
Packit Service c5cf8c
\texttt{sh} and its derivatives, use \verb+2>&1 | tee c.txt+
Packit Service c5cf8c
instead of \verb+|& tee c.txt+).  Other configure options are
Packit Service c5cf8c
described below.  Check the \texttt{c.txt} file to make sure
Packit Service c5cf8c
everything went well.  Problems should be self-explanatory, but if not,
Packit Service c5cf8c
send \texttt{c.txt} to \texttt{discuss@mpich.org}.
Packit Service c5cf8c
The file \texttt{config.log} is created by \texttt{configure} and
Packit Service c5cf8c
contains a record of the tests that \texttt{configure} performed.  It
Packit Service c5cf8c
is normal for some tests recorded in \texttt{config.log} to fail.  
Packit Service c5cf8c
Packit Service c5cf8c
\item
Packit Service c5cf8c
Build MPICH:
Packit Service c5cf8c
\begin{verbatim}
Packit Service c5cf8c
    make |& tee m.txt       (for csh and tcsh)
Packit Service c5cf8c
      OR
Packit Service c5cf8c
    make 2>&1 | tee m.txt   (for bash and sh)
Packit Service c5cf8c
\end{verbatim}
Packit Service c5cf8c
This step should succeed if there were no problems with the preceding
Packit Service c5cf8c
step.  Check file \texttt{m.txt}. If there were problems,
Packit Service c5cf8c
do a \texttt{make clean} and then run make again with \texttt{VERBOSE=1}
Packit Service c5cf8c
\begin{verbatim}
Packit Service c5cf8c
    make VERBOSE=1 |& tee m.txt       (for csh and tcsh)
Packit Service c5cf8c
      OR
Packit Service c5cf8c
    make VERBOSE=1 2>&1 | tee m.txt   (for bash and sh)
Packit Service c5cf8c
\end{verbatim}
Packit Service c5cf8c
and then send \texttt{m.txt} and \texttt{c.txt} to 
Packit Service c5cf8c
\texttt{discuss@mpich.org}.
Packit Service c5cf8c
Packit Service c5cf8c
\item
Packit Service c5cf8c
Install the MPICH commands:
Packit Service c5cf8c
\begin{verbatim}
Packit Service c5cf8c
    make install |& tee mi.txt
Packit Service c5cf8c
\end{verbatim}
Packit Service c5cf8c
This step collects all required executables and scripts in the \texttt{bin}
Packit Service c5cf8c
subdirectory of the directory specified by the prefix argument to
Packit Service c5cf8c
configure. 
Packit Service c5cf8c
Packit Service c5cf8c
(For users who want an install directory structure compliant to
Packit Service c5cf8c
GNU coding standards (i.e., documentation files go to
Packit Service c5cf8c
\texttt{\$\{datarootdir\}/doc/\$\{PACKAGE\}}, architecture independent
Packit Service c5cf8c
read-only files go to \texttt{\$\{datadir\}/\$\{PACKAGE\}}), replace
Packit Service c5cf8c
\texttt{make install} by
Packit Service c5cf8c
Packit Service c5cf8c
\begin{verbatim}
Packit Service c5cf8c
       make install PACKAGE=mpich-<versrion>
Packit Service c5cf8c
\end{verbatim}
Packit Service c5cf8c
Packit Service c5cf8c
and corresponding installcheck step should be
Packit Service c5cf8c
Packit Service c5cf8c
\begin{verbatim}
Packit Service c5cf8c
       make installcheck PACKAGE=mpich-<version>
Packit Service c5cf8c
\end{verbatim}
Packit Service c5cf8c
Packit Service c5cf8c
Setting PACKAGE in \texttt{make install} or \texttt{make installcheck} step
Packit Service c5cf8c
is optional and unnecessary for typical MPI users.)
Packit Service c5cf8c
Packit Service c5cf8c
\item
Packit Service c5cf8c
Add the \texttt{bin} subdirectory of the installation directory to your path:
Packit Service c5cf8c
\begin{verbatim}
Packit Service c5cf8c
    setenv PATH /home/you/mpich-install/bin:$PATH
Packit Service c5cf8c
\end{verbatim}
Packit Service c5cf8c
for \texttt{csh} and \texttt{tcsh}, or 
Packit Service c5cf8c
\begin{verbatim}
Packit Service c5cf8c
    export PATH=/home/you/mpich-install/bin:$PATH
Packit Service c5cf8c
\end{verbatim}
Packit Service c5cf8c
for \texttt{bash}, and
Packit Service c5cf8c
\begin{verbatim}
Packit Service c5cf8c
    PATH=/home/you/mpich-install/bin:$PATH
Packit Service c5cf8c
    export PATH
Packit Service c5cf8c
\end{verbatim}
Packit Service c5cf8c
for \texttt{sh} (the \texttt{bash} syntax may work for more recent 
Packit Service c5cf8c
implementations of \texttt{sh}).  % export var=value is an extension and
Packit Service c5cf8c
                                  % is not in original sh
Packit Service c5cf8c
Check that everything is in order at
Packit Service c5cf8c
this point by doing
Packit Service c5cf8c
\begin{verbatim}
Packit Service c5cf8c
    which mpicc
Packit Service c5cf8c
    which mpiexec
Packit Service c5cf8c
\end{verbatim}
Packit Service c5cf8c
All should refer to the commands in the \texttt{bin} subdirectory of your
Packit Service c5cf8c
install directory.  It is at this point that you will need to
Packit Service c5cf8c
duplicate this directory on your other machines if it is not
Packit Service c5cf8c
in a shared file system. % Just having NFS doesn't mean that directories
Packit Service c5cf8c
                         % are consistencly cross-mounted.
Packit Service c5cf8c
Packit Service c5cf8c
\item Check that you can reach these machines with \texttt{ssh} or
Packit Service c5cf8c
\texttt{rsh} without entering a password.  You can test by doing
Packit Service c5cf8c
Packit Service c5cf8c
\begin{verbatim}
Packit Service c5cf8c
    ssh othermachine date
Packit Service c5cf8c
\end{verbatim}
Packit Service c5cf8c
Packit Service c5cf8c
or
Packit Service c5cf8c
Packit Service c5cf8c
\begin{verbatim}
Packit Service c5cf8c
    rsh othermachine date
Packit Service c5cf8c
\end{verbatim}
Packit Service c5cf8c
Packit Service c5cf8c
If you cannot get this to work without entering a password, you will
Packit Service c5cf8c
need to configure \texttt{ssh} or \texttt{rsh} so that this can be
Packit Service c5cf8c
done.
Packit Service c5cf8c
Packit Service c5cf8c
\item Test the setup you just created:
Packit Service c5cf8c
Packit Service c5cf8c
\begin{verbatim}
Packit Service c5cf8c
    mpiexec -f machinefile -n <number> hostname
Packit Service c5cf8c
\end{verbatim}
Packit Service c5cf8c
Packit Service c5cf8c
The machinefile contains the list of hosts you want to run the
Packit Service c5cf8c
executable on.
Packit Service c5cf8c
Packit Service c5cf8c
\begin{verbatim}
Packit Service c5cf8c
  % cat machinefile
Packit Service c5cf8c
     host1     # Run 1 process on host1
Packit Service c5cf8c
     host2:4   # Run 4 processes on host2
Packit Service c5cf8c
     host3:2   # Run 2 processes on host3
Packit Service c5cf8c
     host4:1   # Run 1 process on host4
Packit Service c5cf8c
\end{verbatim}
Packit Service c5cf8c
Packit Service c5cf8c
\item
Packit Service c5cf8c
Now we will run an MPI job, using the \texttt{mpiexec} command as specified
Packit Service c5cf8c
in the MPI standard.
Packit Service c5cf8c
Packit Service c5cf8c
As part of the build process for MPICH, a simple program to compute the value
Packit Service c5cf8c
of $\pi$ by numerical integration is created in the
Packit Service c5cf8c
\texttt{mpich-%MPICH_VERSION%/examples} directory.  If the current directory is the top
Packit Service c5cf8c
level MPICH build directory, then you can run this program with
Packit Service c5cf8c
\begin{verbatim}
Packit Service c5cf8c
    mpiexec -n 5 -f machinefile ./examples/cpi
Packit Service c5cf8c
\end{verbatim}
Packit Service c5cf8c
The \texttt{cpi} example will tell you which hosts it is running on.
Packit Service c5cf8c
Packit Service c5cf8c
There are many options for \texttt{mpiexec}, by which multiple
Packit Service c5cf8c
executables can be run, hosts can be specified, separate command-line
Packit Service c5cf8c
arguments and environment variables can be passed to different
Packit Service c5cf8c
processes, and working directories and search paths for executables
Packit Service c5cf8c
can be specified.  Do
Packit Service c5cf8c
\begin{verbatim}
Packit Service c5cf8c
    mpiexec --help
Packit Service c5cf8c
\end{verbatim}
Packit Service c5cf8c
for details. A typical example is:
Packit Service c5cf8c
\begin{verbatim}
Packit Service c5cf8c
    mpiexec -f machinefile -n 1 ./master : -n 19 ./slave
Packit Service c5cf8c
\end{verbatim}
Packit Service c5cf8c
to ensure that the process with rank 0 runs on your workstation.
Packit Service c5cf8c
Packit Service c5cf8c
The arguments between `:'s in this syntax are called ``argument sets,''
Packit Service c5cf8c
since they apply to a set of processes.  More argments are described in
Packit Service c5cf8c
the \textit{User's Guide}.
Packit Service c5cf8c
Packit Service c5cf8c
\end{enumerate}
Packit Service c5cf8c
Packit Service c5cf8c
If you have completed all of the above steps, you have successfully
Packit Service c5cf8c
installed MPICH and run an MPI example.  
Packit Service c5cf8c
Packit Service c5cf8c
%
Packit Service c5cf8c
% DO NOT REMOVE THE FOLLOWING SECTION.  IF NECESSARY, UPDATE IT.
Packit Service c5cf8c
\subsection{Selecting the Compilers}
Packit Service c5cf8c
\label{sec:compilers}
Packit Service c5cf8c
The MPICH configure step will attempt to find the C, C++, and Fortran
Packit Service c5cf8c
compilers for you, but if you either want to override the default or
Packit Service c5cf8c
need to specify a compiler that configure doesn't recognize, you can
Packit Service c5cf8c
specify them on the command line using these variables
Packit Service c5cf8c
\begin{description}
Packit Service c5cf8c
\item[CC]The C compiler.  
Packit Service c5cf8c
\item[CXX]The C++ compiler.  Use \texttt{--disable-cxx} if you do not
Packit Service c5cf8c
  want to build the MPI C++ interface
Packit Service c5cf8c
\item[F77]The Fortran 77 compiler (for the original MPI Fortran
Packit Service c5cf8c
  bindings).  Use \texttt{--disable-f77} if you do not want to build
Packit Service c5cf8c
  either the Fortran 77 or Fortran 90 MPI interfaces
Packit Service c5cf8c
\item[FC]The Fortran 90 (or later) compiler.  Use
Packit Service c5cf8c
  \texttt{--disable-fc} if you do not want to build the Fortran 90 MPI
Packit Service c5cf8c
  interfaces.  Note that in previous versions of MPICH, the variable
Packit Service c5cf8c
  name was \texttt{F90}.  As Fortran has had 3 major releases since
Packit Service c5cf8c
  Fortran 90 (95, 2003, and 2008), most tools, including those built
Packit Service c5cf8c
  with GNU autotools, have or are changing to use \texttt{FC} instead
Packit Service c5cf8c
  of \texttt{F90}.
Packit Service c5cf8c
\end{description}
Packit Service c5cf8c
For example, to select the Intel compilers instead of the GNU
Packit Service c5cf8c
compilers on a system with both, use
Packit Service c5cf8c
\begin{verbatim}
Packit Service c5cf8c
    ./configure CC=icc CXX=icpc F77=ifort FC=ifort ...
Packit Service c5cf8c
\end{verbatim}
Packit Service c5cf8c
Note the use of the same Fortran compiler, \texttt{ifort}, for both
Packit Service c5cf8c
Fortran 77 and Fortran 90; this is an increasingly common choice.
Packit Service c5cf8c
Packit Service c5cf8c
\subsection{Compiler Optimization Levels}
Packit Service c5cf8c
Packit Service c5cf8c
MPICH can be configured with two sets of compiler flags:
Packit Service c5cf8c
\texttt{CFLAGS}, \texttt{CXXFLAGS}, \texttt{FFLAGS}, \texttt{FCFLAGS}
Packit Service c5cf8c
(abbreviated as \texttt{xFLAGS}) and \texttt{MPICHLIB\_CFLAGS},
Packit Service c5cf8c
\texttt{MPICHLIB\_CXXFLAGS}, \texttt{MPICHLIB\_FFLAGS},
Packit Service c5cf8c
\texttt{MPICHLIB\_FCFLAGS} (abbreviated as \texttt{MPICHLIB\_xFLAGS})
Packit Service c5cf8c
for compilation; \texttt{LDFLAGS} and \texttt{MPICHLIB\_LDFLAGS} for linking.
Packit Service c5cf8c
All these flags can be set as part of configure command or 
Packit Service c5cf8c
through environment variables.
Packit Service c5cf8c
(\texttt{CPPFLAGS} stands for C preprocessor flags, which should NOT be set)
Packit Service c5cf8c
Packit Service c5cf8c
Both \texttt{xFLAGS} and \texttt{MPICHLIB\_xFLAGS} affect the compilation
Packit Service c5cf8c
of the MPICH libraries. However, only \texttt{xFLAGS} is appended to 
Packit Service c5cf8c
MPI wrapper scripts, \texttt{mpicc} and friends.
Packit Service c5cf8c
Packit Service c5cf8c
MPICH libraries are built with default compiler optimization, \texttt{-O2},
Packit Service c5cf8c
which can be modified by \texttt{--enable-fast} configure option.  For instance,
Packit Service c5cf8c
\texttt{--disable-fast} disables the default optimization option.
Packit Service c5cf8c
\texttt{--enable-fast=O<n>} sets default compiler optimization as
Packit Service c5cf8c
\texttt{-O<n>} (note that this assumes that the compiler accepts this
Packit Service c5cf8c
format). 
Packit Service c5cf8c
For more details of \texttt{--enable-fast}, see the output of
Packit Service c5cf8c
\texttt{configure --help}. 
Packit Service c5cf8c
Any other complicated optimization flags for MPICH libraries have
Packit Service c5cf8c
to be set throught \texttt{MPICHLIB\_xFLAGS}.  \texttt{CFLAGS} and friends
Packit Service c5cf8c
are empty by default.
Packit Service c5cf8c
Packit Service c5cf8c
For example, to build a production MPICH environment with \texttt{-O3} for all
Packit Service c5cf8c
language bindings, one can simply do
Packit Service c5cf8c
Packit Service c5cf8c
\begin{verbatim}
Packit Service c5cf8c
  ./configure --enable-fast=all,O3
Packit Service c5cf8c
\end{verbatim}
Packit Service c5cf8c
Packit Service c5cf8c
or
Packit Service c5cf8c
Packit Service c5cf8c
\begin{verbatim}
Packit Service c5cf8c
  ./configure --enable-fast=all MPICHLIB_CFLAGS=-O3 \
Packit Service c5cf8c
                                MPICHLIB_FFLAGS=-O3 \
Packit Service c5cf8c
                                MPICHLIB_CXXFLAGS=-O3 \
Packit Service c5cf8c
                                MPICHLIB_FCFLAGS=-O3
Packit Service c5cf8c
\end{verbatim}
Packit Service c5cf8c
Packit Service c5cf8c
This will cause the MPICH libraries to be built with \texttt{-O3},
Packit Service c5cf8c
and \texttt{-O3} will
Packit Service c5cf8c
not be included in the \texttt{mpicc} and other MPI wrapper script.
Packit Service c5cf8c
Packit Service c5cf8c
\subsection{Common Non-Default Configuration Options}
Packit Service c5cf8c
\label{sec:non-default}
Packit Service c5cf8c
Packit Service c5cf8c
A brief discussion of some of the \texttt{configure} options is found in
Packit Service c5cf8c
Section~\ref{configure-options}.  Here we comment on some of the most
Packit Service c5cf8c
commonly used options.  
Packit Service c5cf8c
% FIXME: This section needs much more work.
Packit Service c5cf8c
Packit Service c5cf8c
\subsubsection{The Most Important Configure Options}
Packit Service c5cf8c
\label{sec:important-configure-options}
Packit Service c5cf8c
\begin{description}
Packit Service c5cf8c
\item[--prefix]Set the installation directories for MPICH.  
Packit Service c5cf8c
\item[--enable-debuginfo]Provide access to the message queues for
Packit Service c5cf8c
  debuggers such as Totalview.
Packit Service c5cf8c
\item[--enable-g]Build MPICH with various debugging options.  This is
Packit Service c5cf8c
  of interest primarily to MPICH developers.  The options
Packit Service c5cf8c
\begin{verbatim}
Packit Service c5cf8c
  --enable-g=dbg,mem,log
Packit Service c5cf8c
\end{verbatim}
Packit Service c5cf8c
 are recommended in that case.
Packit Service c5cf8c
\item[--enable-fast]Configure MPICH for fastest performance at the
Packit Service c5cf8c
  expense of error reporting and other program development aids.  This
Packit Service c5cf8c
  is recommended only for getting the best performance out of proven
Packit Service c5cf8c
  production applications, and for benchmarking.
Packit Service c5cf8c
\item[--enable-shared]Build MPICH with shared libraries. 
Packit Service c5cf8c
  MPICH will try to automatically detect the type of shared library
Packit Service c5cf8c
  support required. See Section~\ref{sec:shared-libraries} for more details.
Packit Service c5cf8c
\item[--with-pm]Select the process manager.  The default is
Packit Service c5cf8c
  \texttt{hydra}; also useful are \texttt{gforker} and \texttt{remshell}.  You can build with
Packit Service c5cf8c
  all three process managers by specifying
Packit Service c5cf8c
\begin{verbatim}
Packit Service c5cf8c
  --with-pm=hydra:gforker:remshell
Packit Service c5cf8c
\end{verbatim}
Packit Service c5cf8c
\item[--with-java]Set the location of Java installation.  This option
Packit Service c5cf8c
is necessary only if the default Java installation in your PATH does
Packit Service c5cf8c
not contain a valid Java installation for Jumpshot, e.g.
Packit Service c5cf8c
\begin{verbatim}
Packit Service c5cf8c
  --with-java=/opt/jdk1.6.0
Packit Service c5cf8c
\end{verbatim}
Packit Service c5cf8c
\end{description}
Packit Service c5cf8c
Packit Service c5cf8c
Packit Service c5cf8c
\subsubsection{Using the Absoft Fortran compilers with MPICH}
Packit Service c5cf8c
\label{sec:absoft}
Packit Service c5cf8c
Packit Service c5cf8c
For best results, it is important to force the Absoft Fortran compilers to 
Packit Service c5cf8c
make all routine names monocase.  In addition, if lower case is chosen 
Packit Service c5cf8c
(this will match common use by many programs), you must also tell the the 
Packit Service c5cf8c
Absoft compiles to append an underscore to global names in order to access 
Packit Service c5cf8c
routines such as \texttt{getarg} (\texttt{getarg} is not used by MPICH but is
Packit Service c5cf8c
used in some 
Packit Service c5cf8c
of the tests and is often used in application programs).  We recommend 
Packit Service c5cf8c
configuring MPICH with the following options
Packit Service c5cf8c
\begin{verbatim}
Packit Service c5cf8c
Packit Service c5cf8c
setenv F77 f77
Packit Service c5cf8c
setenv FFLAGS "-f -N15"
Packit Service c5cf8c
setenv FCFLAGS "-YALL_NAMES=LCS -YEXT_SFX=_"
Packit Service c5cf8c
Packit Service c5cf8c
./configure ....
Packit Service c5cf8c
Packit Service c5cf8c
\end{verbatim}
Packit Service c5cf8c
Packit Service c5cf8c
Packit Service c5cf8c
Packit Service c5cf8c
Packit Service c5cf8c
\subsection{Shared Libraries}
Packit Service c5cf8c
\label{sec:shared-libraries}
Packit Service c5cf8c
Packit Service c5cf8c
To have shared libraries created when MPICH is built, specify the
Packit Service c5cf8c
following when MPICH is configured:
Packit Service c5cf8c
Packit Service c5cf8c
\begin{verbatim}
Packit Service c5cf8c
    configure --enable-shared
Packit Service c5cf8c
\end{verbatim}
Packit Service c5cf8c
Packit Service c5cf8c
Packit Service c5cf8c
Packit Service c5cf8c
\subsection{What to Tell the Users}
Packit Service c5cf8c
\label{sec:telling}
Packit Service c5cf8c
Packit Service c5cf8c
Now that MPICH has been installed, the users have to be informed of how
Packit Service c5cf8c
to use it.  Part of this is covered in the \emph{User's Guide}.  Other
Packit Service c5cf8c
things users need to know are covered here.
Packit Service c5cf8c
Packit Service c5cf8c
Packit Service c5cf8c
\section{Migrating from MPICH1}
Packit Service c5cf8c
\label{sec:migrating}
Packit Service c5cf8c
Packit Service c5cf8c
MPICH is an all-new rewrite of MPICH1.  Although the basic steps for
Packit Service c5cf8c
installation have remained the same (\texttt{configure}, \texttt{make},
Packit Service c5cf8c
\texttt{make install}), a number of things have changed.  In this
Packit Service c5cf8c
section we attempt to point out what you may be used to in MPICH1 that
Packit Service c5cf8c
are now different in MPICH.
Packit Service c5cf8c
Packit Service c5cf8c
\subsection{Configure Options}
Packit Service c5cf8c
\label{sec:configure-options}
Packit Service c5cf8c
Packit Service c5cf8c
The arguments to \texttt{configure} are different in MPICH1 and MPICH;
Packit Service c5cf8c
the \texttt{Installer's Guide} discusses \texttt{configure}.  In
Packit Service c5cf8c
particular, the newer \texttt{configure} in MPICH does not support the
Packit Service c5cf8c
\verb+-cc=<compiler-name>+ (or \texttt{-fc}, \texttt{-c++}, or
Packit Service c5cf8c
\texttt{-f90}) options.  Instead, many of the items that could be
Packit Service c5cf8c
specified in the command line to configure in MPICH1 must now be set by
Packit Service c5cf8c
defining an environment variable.  E.g., while MPICH1 allowed
Packit Service c5cf8c
\begin{verbatim}
Packit Service c5cf8c
    ./configure -cc=pgcc
Packit Service c5cf8c
\end{verbatim}
Packit Service c5cf8c
MPICH requires
Packit Service c5cf8c
\begin{verbatim}
Packit Service c5cf8c
    ./configure CC=pgcc
Packit Service c5cf8c
\end{verbatim}
Packit Service c5cf8c
Basically, every
Packit Service c5cf8c
option to the MPICH-1 configure that does not start with
Packit Service c5cf8c
\texttt{--enable} or \texttt{--with} is not available as a configure
Packit Service c5cf8c
option in MPICH.  Instead, environment variables must be used.  This is
Packit Service c5cf8c
consistent (and required) for use of version 2 GNU \texttt{autoconf}.
Packit Service c5cf8c
Packit Service c5cf8c
\subsection{Other Differences}
Packit Service c5cf8c
Other differences between MPICH1 and MPICH include the handling of
Packit Service c5cf8c
process managers and the choice of communication device.
Packit Service c5cf8c
Packit Service c5cf8c
For example, the new process managers have a new format and slightly
Packit Service c5cf8c
different semantics for the \texttt{-machinefile} option.  Assume that
Packit Service c5cf8c
you type this data into a file named \texttt{machfile}:
Packit Service c5cf8c
Packit Service c5cf8c
\begin{verbatim}
Packit Service c5cf8c
    bp400:2
Packit Service c5cf8c
    bp401:2
Packit Service c5cf8c
    bp402:2
Packit Service c5cf8c
    bp403:2
Packit Service c5cf8c
\end{verbatim}
Packit Service c5cf8c
Packit Service c5cf8c
If you then run a parallel job with this machinefile, you would expect
Packit Service c5cf8c
ranks 0 and 1 to run on bp400 because it says to run 2 processes there
Packit Service c5cf8c
before going on to bp401.  Ranks 2 and 3 would run on bp401, and rank
Packit Service c5cf8c
4 on bp402, e.g.:
Packit Service c5cf8c
Packit Service c5cf8c
\begin{verbatim}
Packit Service c5cf8c
    mpiexec -l -machinefile machfile -n 5 hostname
Packit Service c5cf8c
\end{verbatim}
Packit Service c5cf8c
Packit Service c5cf8c
produces:
Packit Service c5cf8c
\begin{verbatim}
Packit Service c5cf8c
    0: bp400
Packit Service c5cf8c
    1: bp400
Packit Service c5cf8c
    2: bp401
Packit Service c5cf8c
    3: bp401
Packit Service c5cf8c
    4: bp402
Packit Service c5cf8c
\end{verbatim}
Packit Service c5cf8c
Packit Service c5cf8c
\section{Choosing the Communication Device}
Packit Service c5cf8c
\label{sec:choose-device}
Packit Service c5cf8c
Packit Service c5cf8c
MPICH is designed to be build with many different communication devices,
Packit Service c5cf8c
allowing an implementation to be tuned for different communication fabrics.  A
Packit Service c5cf8c
simple communication device, known as ``ch3'' (for the third version of the
Packit Service c5cf8c
``channel'' interface) is provided with MPICH and is the default choice.
Packit Service c5cf8c
Packit Service c5cf8c
The ch3 device itself supports a variety of communication methods.  These are
Packit Service c5cf8c
specified by providing the name of the method after a colon in the
Packit Service c5cf8c
\texttt{--with-device} configure option.  For example,
Packit Service c5cf8c
\texttt{--with-device=ch3:sock} selects the (older) socket-base communication
Packit Service c5cf8c
method.
Packit Service c5cf8c
Methods supported by the MPICH group include:
Packit Service c5cf8c
Packit Service c5cf8c
\begin{description}
Packit Service c5cf8c
\item[ch3:nemesis]This method is our new, high performance method. It
Packit Service c5cf8c
  has been made the default communication channel starting the 1.1
Packit Service c5cf8c
  release of MPICH.  It uses shared-memory to send messages between
Packit Service c5cf8c
  processes on the same node and the network for processes between
Packit Service c5cf8c
  nodes.  Currently sockets and Myrinet-MX are supported networks.  It
Packit Service c5cf8c
  supports \texttt{MPI\_THREAD\_MULTIPLE} and other levels of thread
Packit Service c5cf8c
  safety.
Packit Service c5cf8c
\item[ch3:sock]This method uses sockets for all communications between
Packit Service c5cf8c
  processes. It supports \texttt{MPI\_THREAD\_MULTIPLE} and other
Packit Service c5cf8c
  levels of thread safety.
Packit Service c5cf8c
\end{description}
Packit Service c5cf8c
Packit Service c5cf8c
Most installations should use the default \texttt{ch3:nemesis} method
Packit Service c5cf8c
for best performance. For platforms that are not supported by nemesis,
Packit Service c5cf8c
the \texttt{ch3:sock} method is suggested.
Packit Service c5cf8c
Packit Service c5cf8c
MPICH is designed to efficiently support all types of systems.  The
Packit Service c5cf8c
\texttt{ch3:nemesis} device is the primary focus of the MPICH group,
Packit Service c5cf8c
but other research groups and computer vendors can and have developed
Packit Service c5cf8c
both their own ch3 ``channels'' as well as complete communication
Packit Service c5cf8c
``devices'' in place of ch3.
Packit Service c5cf8c
Packit Service c5cf8c
Packit Service c5cf8c
%
Packit Service c5cf8c
% Add any configure options that are specific to each method here.  Also
Packit Service c5cf8c
% any environment variables that might apply (e.g., MPICH_INTERFACE_HOSTNAME 
Packit Service c5cf8c
% or MPICH_PORT_RANGE.
Packit Service c5cf8c
%
Packit Service c5cf8c
%\subsection{Special Features of Each Communication Device}
Packit Service c5cf8c
%\subsubsection{ch3:nemesis}
Packit Service c5cf8c
Packit Service c5cf8c
\section{Installing and Managing Process Managers}
Packit Service c5cf8c
\label{sec:process-managers}
Packit Service c5cf8c
MPICH has been designed to work with multiple process managers; that
Packit Service c5cf8c
is, although you can start MPICH jobs with \texttt{mpiexec}, there are
Packit Service c5cf8c
different mechanisms by which your processes are started.  An interface
Packit Service c5cf8c
(called PMI) isolates the MPICH library code from the process manager.
Packit Service c5cf8c
Currently three process managers are distributed with MPICH
Packit Service c5cf8c
\begin{description}
Packit Service c5cf8c
\item[hydra] This is the default process manager tha natively uses the
Packit Service c5cf8c
existing daemons on the system such as ssh, slurm, pbs.
Packit Service c5cf8c
\item[gforker] This is a simple process manager that creates all
Packit Service c5cf8c
  processes on a single machine.  It is useful both for debugging and
Packit Service c5cf8c
  for running on shared memory multiprocessors.
Packit Service c5cf8c
\end{description}
Packit Service c5cf8c
Packit Service c5cf8c
\subsection{hydra} \label{sec:hydra} \texttt{hydra} is the default
Packit Service c5cf8c
process manager that launches processes using the native daemons
Packit Service c5cf8c
present on the system such as ssh, slurm, pbs, etc. To configure with
Packit Service c5cf8c
the \texttt{hydra} process manager, use
Packit Service c5cf8c
Packit Service c5cf8c
\begin{verbatim}
Packit Service c5cf8c
    configure --with-pm=hydra ...
Packit Service c5cf8c
\end{verbatim}
Packit Service c5cf8c
Packit Service c5cf8c
Packit Service c5cf8c
\subsection{gforker}
Packit Service c5cf8c
\label{sec:forker}
Packit Service c5cf8c
\texttt{gforker} is a simple process manager that runs all processes on
Packit Service c5cf8c
a single node; it's version of \texttt{mpiexec} uses the system
Packit Service c5cf8c
\texttt{fork} and \texttt{exec} calls to create the new processes.
Packit Service c5cf8c
To configure with the \texttt{gforker} process manager, use
Packit Service c5cf8c
\begin{verbatim}
Packit Service c5cf8c
    configure --with-pm=gforker ...
Packit Service c5cf8c
\end{verbatim}
Packit Service c5cf8c
Packit Service c5cf8c
\section{Testing}
Packit Service c5cf8c
\label{sec:testing}
Packit Service c5cf8c
Once MPICH has been installed, you can test it by running some of the example
Packit Service c5cf8c
programs in the \texttt{examples} directory.  A more thorough test can be run
Packit Service c5cf8c
with the command \texttt{make testing}.  This will produce a summary on
Packit Service c5cf8c
standard output, along with an XML version of the test results in 
Packit Service c5cf8c
\texttt{mpich/test/mpi}. In addition, running \texttt{make testing} from the
Packit Service c5cf8c
top-level (\texttt{mpich}) directory will run tests of the commands, such as
Packit Service c5cf8c
\texttt{mpicc} and \texttt{mpiexec}, that are included with MPICH.
Packit Service c5cf8c
Packit Service c5cf8c
Other MPI test suites are available from
Packit Service c5cf8c
\url{http://www.mcs.anl.gov/mpi/mpi-test/tsuite.html}.  As part of the MPICH
Packit Service c5cf8c
development, we run the MPICH1, MPICH, C++, and Intel test suites every night
Packit Service c5cf8c
and post the results on
Packit Service c5cf8c
\url{http://www.mpich.org/static/cron/tests/}.
Packit Service c5cf8c
Other tests are run on an occasional basis.  
Packit Service c5cf8c
Packit Service c5cf8c
% \subsection{Using the Intel Test Suite}
Packit Service c5cf8c
% \label{sec:intel}
Packit Service c5cf8c
Packit Service c5cf8c
% These instructions are local to our test environment at Argonne.
Packit Service c5cf8c
Packit Service c5cf8c
% How to run a select set of tests from the Intel test suite:
Packit Service c5cf8c
Packit Service c5cf8c
% \begin{small}
Packit Service c5cf8c
% \begin{verbatim}
Packit Service c5cf8c
% 1) checkout the Intel test suite (svn co https://svn.mcs.anl.gov/repos/mpi/test_suites/intel/trunk IntelMPITEST) (outside users
Packit Service c5cf8c
%    can access the most recent version of the test suite from the
Packit Service c5cf8c
%    test suite web page).
Packit Service c5cf8c
Packit Service c5cf8c
% 2) create a testing directory separate from the IntelMPITEST source
Packit Service c5cf8c
% directory
Packit Service c5cf8c
Packit Service c5cf8c
% 3) cd into that testing directory
Packit Service c5cf8c
Packit Service c5cf8c
% 4) run "<ITS_SRC_DIR>/configure --with-mpich=<MPICH_INSTALL_DIR>", where
Packit Service c5cf8c
% <ITS_SRC_DIR> is the path to the directory Intel test suite source (e.g.,
Packit Service c5cf8c
% /home/toonen/Projects/MPI-Tests/IntelMPITEST) and <MPICH_INSTALL_DIR> is
Packit Service c5cf8c
% the directory containing your MPICH installation
Packit Service c5cf8c
Packit Service c5cf8c
% 5) mkdir Test; cd Test
Packit Service c5cf8c
Packit Service c5cf8c
% 6) find tests in <ITS_SRC_DIR>/{c,fortran} that you are interested in
Packit Service c5cf8c
% running and place the test names in a file.  For example:
Packit Service c5cf8c
Packit Service c5cf8c
% % ( cd /home/toonen/Projects/MPI-Tests/IntelMPITEST/Test ; \
Packit Service c5cf8c
%     find {c,fortran} -name 'node.*' -print | grep 'MPI_Test' 
Packit Service c5cf8c
%     | sed -e 's-/node\..*$--' ) |& tee testlist
Packit Service c5cf8c
% Test/c/nonblocking/functional/MPI_Test
Packit Service c5cf8c
% Test/c/nonblocking/functional/MPI_Testall
Packit Service c5cf8c
% Test/c/nonblocking/functional/MPI_Testany
Packit Service c5cf8c
% Test/c/nonblocking/functional/MPI_Testsome
Packit Service c5cf8c
% Test/c/persist_request/functional/MPI_Test_p
Packit Service c5cf8c
% Test/c/persist_request/functional/MPI_Testall_p
Packit Service c5cf8c
% Test/c/persist_request/functional/MPI_Testany_p
Packit Service c5cf8c
% Test/c/persist_request/functional/MPI_Testsome_p
Packit Service c5cf8c
% Test/c/probe_cancel/functional/MPI_Test_cancelled_false
Packit Service c5cf8c
% Test/fortran/nonblocking/functional/MPI_Test
Packit Service c5cf8c
% Test/fortran/nonblocking/functional/MPI_Testall
Packit Service c5cf8c
% Test/fortran/nonblocking/functional/MPI_Testany
Packit Service c5cf8c
% Test/fortran/nonblocking/functional/MPI_Testsome
Packit Service c5cf8c
% Test/fortran/persist_request/functional/MPI_Test_p
Packit Service c5cf8c
% Test/fortran/persist_request/functional/MPI_Testall_p
Packit Service c5cf8c
% Test/fortran/persist_request/functional/MPI_Testany_p
Packit Service c5cf8c
% Test/fortran/persist_request/functional/MPI_Testsome_p
Packit Service c5cf8c
% Test/fortran/probe_cancel/functional/MPI_Test_cancelled_false
Packit Service c5cf8c
% %
Packit Service c5cf8c
Packit Service c5cf8c
% 7) run the tests using ../bin/mtest:
Packit Service c5cf8c
Packit Service c5cf8c
% % ../bin/mtest -testlist testlist -np 6 |& tee mtest.log
Packit Service c5cf8c
% %
Packit Service c5cf8c
Packit Service c5cf8c
% NOTE: some programs hang if less they are run with less than 6 processes.
Packit Service c5cf8c
Packit Service c5cf8c
% 8) examine the summary.xml file.  look for '<STATUS>fail</STATUS>' to see if
Packit Service c5cf8c
% any failures occurred.  (search for '>fail<' works as well)
Packit Service c5cf8c
Packit Service c5cf8c
% \end{verbatim}
Packit Service c5cf8c
% \end{small}
Packit Service c5cf8c
Packit Service c5cf8c
\section{Benchmarking}
Packit Service c5cf8c
\label{sec:benchmarking}
Packit Service c5cf8c
Packit Service c5cf8c
There are many benchmarking programs for MPI implementations.  Three
Packit Service c5cf8c
that we use are \texttt{mpptest}
Packit Service c5cf8c
(\url{http://www.mcs.anl.gov/mpi/mpptest}), \texttt{netpipe}
Packit Service c5cf8c
(\url{http://www.scl.ameslab.gov/netpipe}), and \texttt{SkaMPI}
Packit Service c5cf8c
(\url{http://liinwww.ira.uka.de/~skampi}).  Each of these has
Packit Service c5cf8c
different strengths and weaknesses and reveals different properties of
Packit Service c5cf8c
the MPI implementation.
Packit Service c5cf8c
Packit Service c5cf8c
In addition, the
Packit Service c5cf8c
MPICH test suite contains a few programs to test for performance artifacts in
Packit Service c5cf8c
the directory \texttt{test/mpi/perf}.  An example of a performance artifact is
Packit Service c5cf8c
markedly different performance for the same operation when performed in two
Packit Service c5cf8c
different ways.  For example, using an MPI datatype for a non-contiguous
Packit Service c5cf8c
transfer should not be much slower than packing the data into a contiguous
Packit Service c5cf8c
buffer, sending it as a contiguous buffer, and then unpacking it into the
Packit Service c5cf8c
destination buffer.  An example of this from the MPI-1 standard illustrates
Packit Service c5cf8c
the use of MPI datatypes to transpose a matrix ``on the fly,'' and one test in
Packit Service c5cf8c
\texttt{test/mpi/perf} checks that the MPI implementation performs well in
Packit Service c5cf8c
this case.
Packit Service c5cf8c
Packit Service c5cf8c
\section{All Configure Options}
Packit Service c5cf8c
\label{configure-options}
Packit Service c5cf8c
Packit Service c5cf8c
To get the latest list of all the configure options recognized by the
Packit Service c5cf8c
top-level configure, use:
Packit Service c5cf8c
\begin{verbatim}
Packit Service c5cf8c
    configure --help
Packit Service c5cf8c
\end{verbatim}
Packit Service c5cf8c
Not all of these options may be fully supported yet.  
Packit Service c5cf8c
Packit Service c5cf8c
% Fixme:  Explain some of them, at least the ones that we ask the
Packit Service c5cf8c
% users to try.
Packit Service c5cf8c
Packit Service c5cf8c
\paragraph{Notes on the configure options.}
Packit Service c5cf8c
The \texttt{--with-htmldir} and \texttt{--with-docdir} options specify the 
Packit Service c5cf8c
directories into which the documentation will be installed by \texttt{make
Packit Service c5cf8c
  install}. 
Packit Service c5cf8c
Packit Service c5cf8c
\appendix
Packit Service c5cf8c
Packit Service c5cf8c
\end{document}
Packit Service c5cf8c
Packit Service c5cf8c
%
Packit Service c5cf8c
% Comments on subclassing the document
Packit Service c5cf8c
% We can use \ifdevname ... \fi and \ifpmname ... \fi, as in
Packit Service c5cf8c
% \ifdevchiii .. \fi and \ifpmmpd ... \fi
Packit Service c5cf8c
% (these will still need to be defined)
Packit Service c5cf8c
% There should also be a way to select ``all'' in such a way that the
Packit Service c5cf8c
% document can still flow well, such as
Packit Service c5cf8c
% \ifdevall ... \else \ifdevchiii \else \ifdevmm \fi \fi \fi