Difference between revisions of "How to Use MPI"

From HPC Wiki
Jump to: navigation, search
Line 120: Line 120:
 
| Option || Function
 
| Option || Function
 
|-
 
|-
| -np <num_procs> or  -n <num_procs> || number of processes to run
+
| -n <num_procs> || number of processes to run
 
|-
 
|-
| -npersocket <num_procs> || number of processes per socket
+
| -ppn <num_procs> || number of processes per node
|-
 
| -npernode <num_procs> || number of processes per node
 
 
|-
 
|-
 
| -wdir <directory> || change to directory specified before executing the program
 
| -wdir <directory> || change to directory specified before executing the program
|-
 
| -nw || complete command when all MPI processes have been launched successfully
 
 
|-
 
|-
 
| -path <path> || look for executables in the directory specified
 
| -path <path> || look for executables in the directory specified
 
|-
 
|-
| -q or -quiet || suppress helpful messages
+
| -outfile-pattern <name> || redirect stdout to file
|-
 
| -output-filename <name> || redirect output into the file <name>.<rank>
 
 
|-
 
|-
 
| --help || list all options available with an explanation
 
| --help || list all options available with an explanation

Revision as of 13:54, 4 April 2018

Basics

This will give you a general overview of how to compile and execute a program that has been parallelized with MPI. Many of the options listed below are the same for both Open MPI and Intel MPI, however, be care if they do differentiate.


Loading the Correct Modules

Open MPI

To ensure that the Open MPI module is loaded, check the output of the following command:

$ module list

In case it has not been loaded yet, type

$ module load openmpi

If you are currently using Intel MPI, type

$ module switch intelmpi openmpi

Intel MPI

Look for "intelmpi" in the output of this command:

$ module list

In case it did not appear in the output, you have to load the module by typing

$ module load intelmpi

If Open MPI has already been loaded, switch to Intel MPI like this:

$ module switch openmpi intelmpi


How to Compile MPI Code

There are several so called MPI "compiler wrappers", e.g. "mpicc". These take care of including the correct MPI libraries for each programming language etc. for you. But they share most command line options. Depending on whether your code is written in C, C++ or Fortran, follow the instructions in one of the tables below. Make sure to replace the arguments inside <…> with specific values.

Open MPI

Use the following command to specify the program you would like to compile (replace <src_file> with a path to your code, e. g. ./myprog.c).

Language Command
C $ mpicc <src_file> -o <name_of_executable>
C++ $ mpicxx <src_file> -o <name_of_executable
Fortran $ mpifort <src_file> -o <name_of_executable>

You can also type the command $ mpicc [options], $ mpicxx [options] or $ mpifort [options]. There are a few options that come with Open MPI, however, options are more important for running your program. The compiler options might be useful to fetch more information about the Open MPI module you're using.

Options Function
-showme:help print a short help message about the usage and lists all compiler options
-showme:version show Open MPI version

For RWTH cluster users: Instead of typing the compiler wrapper mpicc etc., you can simply put one of the environment variables $MPICC, $MPICXX or $MPIFC for Fortran codes. They are already set by the module system so that you do not have to worry about which compiler module to use.

Intel MPI

Use the following command to specify the program you would like to compile (replace <src_file> with a path to your code, e. g. ./myprog.c).

Compiler Driver C C++ Fortran
GCC $ mpicc <src_file> -o <name> $ mpicpc <src_file> -o <name> $ mpifort <src_file> -o <name>
Intel $ mpiicc <src_file> -o <name> $ mpiicpc <src_file> -o <name> $ mpiifort <src_file> -o <name>

You can also type the command $ mpicc [options] <src_file> -o <name> etc., where [options] can be replaced with one or more of the ones listed below. Intel MPI comes with rather advanced compiler options, that are mainly aimed at optimization and analyzing your code with the help of Intel tools.

Options Function
-g enable debug mode
-O enable compiler optimization
-v print compiler version

For RWTH cluster users: Instead of typing the compiler wrapper mpicc etc., you can simply put one of the environment variables $MPICC, $MPICXX or $MPIFC for Fortran codes. They are already set by the module system so that you do not have to worry about which compiler module to use.


How to Run an MPI Executable

Ensure that your the correct MPI module is loaded (see here). Once again, the command line options slightly differ between Intel MPI and Open MPI. In order to start any MPI program, type the following command where <executable> specifies the path to your application:

$ mpirun -n <num_procs> [options] <executable>

Note that mpiexec and mpirun are synonymous in Open MPI, in Intel MPI it's mpiexec.hydra and mpirun.

Don’t forget to put the “-np” or “-n” option as explained below. All the other options listed below are not mandatory.

Open MPI

Option Function
-np <num_procs> or -n <num_procs> number of processes to run
-npersocket <num_procs> number of processes per socket
-npernode <num_procs> number of processes per node
-wdir <directory> change to directory specified before executing the program
-nw complete command when all MPI processes have been launched successfully
-path <path> look for executables in the directory specified
-q or -quiet suppress helpful messages
-output-filename <name> redirect output into the file <name>.<rank>
--help list all options available with an explanation

Intel MPI

Option Function
-n <num_procs> number of processes to run
-ppn <num_procs> number of processes per node
-wdir <directory> change to directory specified before executing the program
-path <path> look for executables in the directory specified
-outfile-pattern <name> redirect stdout to file
--help list all options available with an explanation


References

Intel MPI compiler options