ALIs
kommt nochIntel MPI
Intel's MPI implementation allows to build an MPI application once and run it on various interconnects. Good performance can be achieved also over proprietary interconnects if the vendor provides a DAPL implementation which Intel MPI can make use of.
Table of contents
- Setting up for the use of Intel MPI
- Compiling and linking
- Executing Intel MPI programs
- Execution on the Linux Cluster (SGE), on HLRB-II (PBS), or on SuperMUC (LoadLeveler)
- Execution on the Linux Cluster (SLURM)
- Hybrid program execution
- Handling environment variables
- Environment variables controlling the execution
- Documentation
- General Information on MPI
- Intel MPI documentation
Setting up for the use of Intel MPI
On all HPC systems at LRZ, environment modules are used to set up software packages. Since Intel MPI is not the default MPI flavour, you may need to unload the default MPI environment before loading the Intel MPI module:
module unload mpi.altix mpi.mpt mpi.ibm mpi.parastation mpi.mpich2
module load mpi.intel
This environment module makes available all tools needed to compile and execute MPI programs as described in the main MPI document. Since Intel MPI is (probably) not binary compatible to any other MPI flavour, you should completely re-compile and re-link your application under the new environment.
Compiling and linking
The following table lists a number of options which can be used with the compiler wrappers in addition to the usual switches for optimization etc.| Option | Meaning | Remarks |
| -mt-mpi | link against thread-safe MPI | thread-safeness up to MPI_THREAD_MULTIPLE is provided |
| -static-mpi | use static instead of dynamic MPI libraries | default is dynamic |
| -t[=log] | compile with MPI tracing. | The module mpi_tracing must be loaded after the mpi.intel module |
| -ilp64 | link against MPI interface with 8 byte integers | you may need to also specify -i8 for compiling your code. |
Executing Intel MPI programs
Execution on the Linux Cluster (SGE), on HLRB-II (PBS), or on SuperMUC (LoadLeveler)
Before executing the binary, the mpi.intel module must again be loaded in the executing shell; this will, where necessary, also set up the so-called MPD ring by automatically running the mpdboot command. For both interactive and batch execution, the mpiexec command should be used to start up the MPI program:mpiexec -n 12 ./myprog.exe
Execution on the Linux Cluster (SLURM)
Please use the srun_ps utility when starting up Intel MPI binaries under control of the SLURM scheduler. For simply running the executalbe program, it is not necessary to load the mpi.intel module.
Hybrid program execution
Newer versions of Intel MPI can use process pinning to achieve good performance for mixed MPI and OpenMP programs: For example, the command sequence
export OMP_NUM_THREADS=4
export I_MPI_PIN_DOMAIN=omp:compact
mpiexec -n 12 ./myprog.exe
will start 12 MPI tasks with 4 threads each, keeping threads as near to their master tasks by spreading out the MPI tasks. This is probably the most efficient way to proceed in the majority of cases.
Handling environment variables
The mpiexec command takes a number of options to control how environment variables are transmitted to the started MPI tasks. A typical command line might look like
mpiexec -genv MY_VAR_1 value1 -genv MY_VAR_2 value2 -n 12 ./myprog.exe
Please consult the documentation linked below for further details and options.
Environment variables controlling the execution
Here some Altix-specific environment variables controlling the execution of Intel MPI are described. Please consult the documentation for Intel MPI for the very large set of I_MPI_* variables which allow to extensively configure and optimize at compile as well as run time.
|
Name |
Function |
Remarks |
|---|---|---|
|
SGI Altix xpmem DAPL - Altix specific settings |
||
|
DAPL_XPMEM_MEMMAP_VERBOSE |
This variable can be set (to any value) to issue additional diagnostic messages, especially if your code crashes with DAPL related error messages. |
May improve performance if your application generates many small messages. Default is 512. |
|
DAPL_XPMEM_MAPPED_HEAP_SIZE |
This variable must be set to the size of the statically defined heap memory area (in Bytes) if your code has many statically defined large arrays. Not setting this may lead to crashes in the DAPL setup phase ("Assertion `remote_ep' failed"). |
the command size myprog.exe will give you an estimate for the upper limit to set. |
|
DAPL_XPMEM_MAPPED_STACK_SIZE |
This variable must be set to the size of the statically defined stack memory area (in Bytes) if your code has many automatic arrays which turn out to be large. |
It may be a good idea to use the -heap-arrays compilation switch to circumvent usage of this variable. |
Documentation
General Information on MPI
Please refer to the MPI page at LRZ for the API documentation and information about the different flavors of MPI available.
Intel MPI documentation
After the mpi.intel module is loaded, the $MPI_DOC environment variable points at a directory containing PDF format reference manuals and other documents.For the most up-to-date release, the documentation can also be found on Intel's web site.