The following is a cookbook for compiling single-precision and double-precision GROMACS 3.3.3 in OSX 10.5 (specifically on a MacBook Pro, but most likely general to all things running 10.5) with OpenMPI 1.2.6. My hope is that this saves someone several hours of unnecessary work trying to overcome an otherwise unknown incompatibility between MPICH2 and GROMACS 3.3.3 in Leopard (10.5).
The content of this page is a result of an unsuccessful several hours of trying to build GROMACS-MPI versions with MPICH2 1.0.6 and 1.0.7. MPICH2 compiles just fine with standard options, including a successful testing of mpd and mpdtrace. GROMACS 3.3.3 compiles just fine with standard options for both single-precision and double-precision. Compiling GROMACS with MPI support yields an mdrun file that fails in the following manner:
[host:XXXX1] *** Process received signal *** [host:XXXX1] Signal: Segmentation fault (11) [host:XXXX1] Signal code: Address not mapped (1) [host:XXXX1] Failing at address: 0xffffff94 [ 1] [0x00000000, 0xffffff94] (FP-) [host:XXXX2] *** Process received signal *** [host:XXXX2] Signal: Bus error (10) [host:XXXX2] Signal code: (2) [host:XXXX2] Failing at address: 0x2 [host:XXXX1] *** End of error message *** [ 1] [0x00000000, 0x00000002] (FP-) [marlin:XXXX2] *** End of error message ***
This problem, it has been discovered, is remedied by using OpenMPI 1.2.6. Not a proper diagnosis of the MPICH2/GROMACS problem, but my primary concern is getting MPI working in order to use both cores on my MacBook Pro to get calculations running, not fixing software bugs to get someone else's calculations running (when there's an easier fix, anyway).
You'll need the following three files (relevant versions and links are subject to change!):
According to the website:
FFTW is a C subroutine library for computing the discrete Fourier transform (DFT) in one or more dimensions, of arbitrary input size, and of both real and complex data (as well as of even/odd data, i.e. the discrete cosine/sine transforms or DCT/DST).
FFTW compiles double-precision libraries by default. You'll need to build single-precision libraries for the single-precision GROMACS install.
The newest version. Compilation of version 3.3.2 leads to various problems under OSX 10.5 (undiagnosed here, but certainly reproducible).
This is the MPICH2 replacement (meaning I've used MPICH2 for other programs). Again, I'm not playing favorites on a version-to-version level. On my MacBook Pro running OSX 10.5, OpenMPI does what I need, MPICH2 doesn't.
GROMACS uses MPI to distribute processes between processors. If you don't have GROMACS compiled with MPI, you don't have multi-processor calculations (simple enough). That is to say, the Activity Monitor reads 100% for one processor and residual % for all other processes on the other chip (this was a point of confusion in a few discussions, in case someone wonders why I would bother bringing such a point up).
Associated Notes On Compilation
A few important notes to be aware of for the compilation.
XCode 3.0, http://developer.apple.com/tools/xcode/
If you've not installed XCode 3.0 yet, you should in order to get compilers and libraries installed on your machine. XCode is the official programmer's toolbox under OSX and installs far more than you'll need (but it never hurts). Note that this is a BIG download (1.1 GB) but is a far less taxing route to getting all of the necessary files installed on your machine than relying on (many, many) individual downloads.
Running "make install" will install files into core directories that are inaccessible to typical OSX User accounts. Access to these directories (such as /usr/local and /usr/local/lib) is granted only to the root user in OSX, which is not activated by default (and a good thing, too). To turn on root access, go to:
Macintosh HD > Applications > Utilities > Directory Utility
In Directory Utility, go to
Edit > Enable Root User
At build time, you'll want to be logged in as the root user (see below).
No Spaces In Folder Names
This goof also took some time to figure out. Regardless of where you start the program build processes from, you need to make sure your directory names have no spaces between words.
>& FILENAME.txt is used to direct output to FILENAME.txt, providing a way to follow each step in the process for error checking and the like. For diagnosis purposes, the files from my build are provided here for the GROMACS work. Click on each name to open the log file.
How to follow the text below:
1. Step in the process (one per program, significant activity)
1a. Text that follows the numeric-alphabetical label is what needs to be typed in at the Terminal window prompt. Descriptive/explanatory text follows below each step.
The installation is assumed to be set up as follows: the GROMACS, OpenMPI, and FFTW .tar files (I suspect downloading will automatically unzip them) exist in a directory on your Desktop (say, INSTALL_DIRECTORY_NAME). Here's the compilation procedure:
1. Open a Terminal (Macintosh HD > Applications > Utilities > Terminal). If you don't have this application on your Dock, I recommend putting it there. You'll certainly be getting some use out of it.
2. The Terminal window defaults to your User directory. First we change our user to root (for full access), then cd into the install directory.
(put in root password at prompt)
at prompt, type:
2c. cd Desktop/INSTALL_DIRECTORY_NAME
3. untar the GROMACS, OpenMPI, and FFTW .tar downloads (again, I suspect they will have already been unzipped as part of the download). You'll end up with three new directories in this folder.
3a. tar -xvf fftw-3.1.2.tar
3b. tar -xvf gromacs-3.3.3.tar
3c. tar -xvf openmpi-1.2.6.tar
4. Build FFTW
We'll compile fftw-3.1.2 first. For the single-precision build, the steps are:
4a. cd fftw-3.1.2
4b. ./configure --enable-float --enable-threads >& configure_fftw_single.txt
4c. make >& make_fftw_single.txt
4d. make install >& make_install_fftw_single.txt
4e. make distclean >& make_distclean_fftw_single.txt
4f. cd ..
This series of steps configures (configure), builds (make), moves (install) and cleans up (distclean). The ">&" directs output to the .txt files for diagnosis (all of which you can leave off). To follow step progress, open a new Terminal window, get to the directory of interest and type:
4g. tail -f FILENAME_OF_INTEREST.txt
To build the double-precision version (FFTW default and what you're better off building anyway)
4h. cd fftw-3.1.2
4i. ./configure --enable-threads >& configure_fftw_double.txt
4j. make >& make_fftw_double.txt
4k. make install >& install_fftw_double.txt
4l. make distclean >& distclean_fftw_double.txt
4m. cd ..
5. Build OpenMPI
This build could not be easier. This build will place the OpenMPI 1.2.6 executables into /usr/local/openmpi (in the interest of organization).
5a. cd openmpi-1.2.6
5b. ./configure --prefix=/usr/local/openmpi >& configure_openmpi.txt
5c. make >& make_openmpi.txt
5d. make install >& install_openmpi.txt
5e. make distclean >& distclean_openmpi.txt
5f. cd ..
6. Build GROMACS
The following four builds will yield all four possible combinations of GROMACS (single-precision and double-precision) and MPI (without and with). Do you need four builds of GROMACS? Definitely not. If you're reading this page, you're probably interested only in double-precision and MPI (the last of the four). The four builds listed below were performed for testing purposes only. I only ever use the double-precision MPI version when I'm doing my own work.
Note: Each build included the generation of links to executables that go into /usr/local/bin. Accordingly, all four versions are accessible from the Terminal window without having to specify directories (and each version has individually named files as defined in –program-suffix= ).
This will install a single-precision GROMACS build into /usr/local/gromacs333_single with no specific file suffix.
6a. cd gromacs-3.3.3
6b. ./configure --prefix=/usr/local/gromacs333_single >& gromacs_single_configure.txt
6c. make >& gromacs_single_make.txt
6d. make install >& gromacs_single_install.txt
6e. make links >& gromacs_single_links.txt
6f. make distclean >& gromacs_single_distclean.txt
6g. cd ..
GROMACS Single-Precision With OpenMPI
This will install a single-precision MPI-GROMACS build into /usr/local/gromacs333_single_mpi with the file suffix _mpi.
6h. cd gromacs-3.3.3
6i. ./configure --enable-mpi --program-suffix=_mpi --prefix=/usr/local/gromacs333_single_mpi >& gromacs_single_mpi_configure.txt
6j. make >& gromacs_single_mpi_make.txt
6k. make install >& gromacs_single_mpi_install.txt
6l. make links >& gromacs_single_mpi_links.txt
6m. make distclean >& gromacs_single_mpi_distclean.txt
6n. cd ..
This will install a double-precision GROMACS build into /usr/local/gromacs333_double with the file suffix _d.
6o. cd gromacs-3.3.3
6p. ./configure --program-suffix=_d --prefix=/usr/local/gromacs333_double --enable-double >& gromacs_double_configure.txt
6q. make >& gromacs_double_make.txt
6r. make install >& gromacs_double_install.txt
6s. make links >& gromacs_double_links.txt
6t. make distclean >& gromacs_double_distclean.txt
6u. cd ..
GROMACS Double-Precision With OpenMPI
This will install a double-precision MPI-GROMACS build into /usr/local/gromacs333_double_mpi with the file suffix _mpi_d.
6v. cd gromacs-3.3.3
6w. ./configure --enable-mpi --program-suffix=_mpi_d --prefix=/usr/local/gromacs333_double_mpi --enable-double >& gromacs_double_mpi_configure.txt
6x. make >& gromacs_double_mpi_make.txt
6y. make install >& gromacs_double_mpi_install.txt
6z. make links >& gromacs_double_mpi_links.txt
6aa. make distclean >& gromacs_double_distclean_mpi.txt
6ab. cd ..
Running MPI-GROMACS Calculations (Non-specific)
Running MPI-GROMACS is straightforward, requiring only one additional step and a few changes to how you use grompp and mdrun.
a. mpd &
b. grompp_mpi_d -np 2
-np 2 is added to tell grompp that two processors are being used. mdrun expects the same number of processors as was specified in grompp.
c. mpirun -np 2 /usr/local/gromacs333_double_mpi/bin/mdrun_mpi_d -np 2
mpirun first calls the number of processors to use (-np 2) and then requires specification of the path to the mdrun executable (/usr/local/gromacs333_double_mpi). mdrun requires specifying the number of processors as well (-np 2) as per the specification in grompp.
Like all first draft cookbooks, this might be missing some important spices. If, by any chance, you found this page and have recommendations to improve speed, stability, organization, etc., please drop a line and I'll keep track of modifications.