OpenMPI programs are those written to the MPI specification and linked with the Scyld ClusterWare OpenMPI libraries.
This section discusses how to build (or compile) OpenMPI programs on Scyld ClusterWare using open source and commercial compilers.
Scyld ClusterWare provides the mpicc, mpiCC,
mpif77 and mpif90 compile wrappers to build C, C++, Fortran 77 and Fortran 90 OpenMPI binaries.
Unlike MPICH, there exists a set of wrapper for various compilers. The env-modules package provides an easy means for the user to switch between the
various compilers.
Be sure to load the correct module to favor the OpenMPI wrappers so that you do not use the MPICH compile wrappers found in /usr.
For example, to compile the C program my_prog.c
using the GNU compiler:
[user@cluster ~]$ module load openmpi/gnu
[user@cluster ~]$ mpicc -o my_prog my_prog.c |
When you are done using OpenMPI, or if you wish to switch back to MPICH,
simple unload the module:
[user@cluster ~]$ module unload openmpi/gnu |
You can change the compiler used to build and link OpenMPI programs by loading the env-module for the compiler of your choice.
For example, to compile the C program my_prog.c with the Intel icc compiler:
[user@cluster ~]$ module load openmpi/intel
[user@cluster ~]$ mpicc -o my_prog my_prog.c |
Currently, there are modules for the GNU, Intel, PGI and PathScale compilers. To see a list of all of the available modules:
[user@cluster ~]$ module avail openmpi
--------------------------- /opt/modulefiles -------------------------------
openmpi/gnu(default) openmpi/path
openmpi/intel openmpi/pgi |
For more detail, or for cases where using the wrappers isn't an option, you can use
-show to see how the compiler wrappers will build and link your program:
[user@cluster ~]$ module load openmpi/intel
[user@cluster ~]$ mpicc -o my_prog my_prog.c -show
icc -I/usr/openmpi/include -I/usr/lib64/OMPI/intel -o my_prog my_prog.c \
-L/usr/lib64/OMPI/intel -lmpi -lopen-rte -lopen-pal -libverbs -ldat \
-lrt -ltorque -ldl -lnsl -lutil -lm |
For more information about creating your own modules,
see
http://modules.sourceforge.net and the manpages
man module and
man modulefile.