GPC MPI Versions
You can only use ONE mpi version at a time as most versions use the same names for the mpirun and compiler wrappers, so be careful which modules you have loaded in your ~/.bashrc. For this reason, we recommend generally not loading any modules in your .bashrc.
OpenMPI
To use OpenMPI compiled with the intel compilers load the modules
module load intel openmpi
or for the gcc version use
module load gcc openmpi/1.4.2-gcc-v4.4.0-ofed
The MPI library wrappers for compiling are mpicc/mpicxx/mpif90/mpif77.
OpenMPI has been built to support various communication methods and automatically uses the best method depending on how and where it is run. To explicitly specify the method you can use the following --mca flags following for infiniband
mpirun --mca btl self,sm,openib -np 16 ./a.out
and the following for IPoIB (not recommended)
mpirun --mca btl self,sm,tcp --mca btl_tcp_if_exclude lo,eth0 -np 16 ./a.out
If your program runs into what appears to be memory issues with larger jobs try using the xrc communications
mpirun --mca btl_openib_receive_queues X,128,256,192,128:X,2048,256,128,32:X,12288,256,128,32 --mca btl_openib_max_send_size 12288"
If you are still having issues you can try openmpi > 1.6 which uses MellanoX Messaging library (MXM) by default over 128 tasks
module load openmpi/intel/1.6.4
or can be explicitly asked for by using if using less than 128 mpi tasks
mpirun--mca mtl mxm --mca mtl_mxm_np 2 -np 16 ./a.out
To NOT use MXM use:
mpirun--mca pml ob1 -np 16 ./a.out
For mixed openMP/MPI applications, set OMP_NUM_THREADS to the number of threads per process and add '--bynode' to the mpirun command, e.g.,
export OMP_NUM_THREADS=4 mpirun -np 6 --bynode ./a.out
would start 6 MPI processes on different nodes, each with 4 openMP threads. If your script requests 3 nodes, each node gets 2 MPI processes.
For more information on available flags see the OpenMPI FAQ
IntelMPI
IntelMPI is also a MPICH2 derivative customized by Intel. To use IntelMPI (4.x) compiled with the intel compilers load the modules
module load intel intelmpi
The MPI library wrappers for compiling are mpicc/mpicxx/mpif90/mpif77.
IntelMPI requires a .mpd.conf file containing the variable "MPD_SECRETWORD=..." in your $HOME directory. To create this file use
echo "MPD_SECRETWORD=ABC123" > ~/.mpd.conf chmod 600 ~/.mpd.conf
IntelMPI, like OpenMPI, has been built to support various communication methods and automatically uses the best method depending on how and where it is run.
mpirun -np 16 ./a.out
To explicitly specify the method you can use the following flags to use
the following flags for infiniband (dapl) and shared memory (best performance on IB)
mpirun -np 16 -env I_MPI_FABRICS=shm:dapl ./a.out
or the following for openfabrics (ibverbs) infiniband
mpirun -np 16 -genv I_MPI_FABRICS=shm:ofa ./a.out
or the following for IPoIB
mpirun -np 16 -env I_MPI_TCP_NETMASK=ib -env I_MPI_FABRICS shm:tcp ./a.out
If you run into communication errors that appear related to memory try some of the following flags
module load intelmpi/4.0.3.008 mpirun -np 16 -genv I_MPI_FABRICS=shm:ofa -genv I_MPI_OFA_USE_XRC=1 -genv I_MPI_OFA_DYNAMIC_QPS=1 -genv I_MPI_OFA_NUM_RDMA_CONNECTIONS=-1 ./a.out
For hybrid openMP/MPI runs, set OMP_NUM_THREADS to the desired number of OpenMP threads per MPI process and specify the number of MPI processes per node on the mpirun command line with -ppn <num>. E.g.
export OMP_NUM_THREADS=4 mpirun -ppn 2 -np 6 ./a.out
would start a total of 6 MPI processes each with 4 threads, with each node running 2 MPI processes. Your script should request 3 nodes in this case. Note: to compile for hybrid openMP/MPI with IntelMPI, you need to add the flag -mt_mpi to your compilation command (i.e. mpicc/mpif90/mpicxx).
For more information on these an other flags see Intel's Documentation page especially the "Getting Started (Linux)" Guide.