Why it is needed?
Different MPI implementations have their specific benefits and advantages. So in the specific cluster environment the HPC application with the other MPI implementation can probably perform better.
Intel® MPI Library has the following benefits:
- Support of the wide range of cluster hardware and software
- Full support and tuned performance of all modern Intel processors
- Full support and tuned performance of wide variety of modern interconnects, full support of Intel interconnects
- Integration with Intel® Trace Analyzer and Collector
- Tracing all MPI events in parallel application;
- Disbalance detection;
- MPI correctness checks;
- API for user code instrumentation;
- Extended debug and statistics output
- Intel MPI Library has an ability to output key statistics about parallel run to identify issues and tune performance;
- Full control of parallel application execution
- Rich set of controls via environment variables, control flags or configuration files
- Support
- Online support with Intel® Premier Support
- Intel® Developer Zone
- Forums
Requirements
To use Intel MPI Library the following is required:
- System based on the Intel® 64 or Intel® MIC architecture;
How to
Note. There are two possible ways to use Intel MPI Library 5.0 for MPICH based applications:
- Recompile the application from the sources
- Use ABI compatibility between Intel MPI Library 5.0 and MPICH (starting with version 3.1) (for more details please refer to MPICH ABI Compatibility Initiative, the article "20 Years of the MPI Standard. Now With a Common Application Binary Interface" by Alexander Supalov Intel Cluster Tools Architect, and Artem Yalozo, Software Engineer, Intel Corporation)
In this article the usage of ABI compatibility will be covered.
The MPI-3 standard has announced a new routine MPI_Get_library_version to determine what MPI implementation is used in runtime.
This small MPI application demonstrates its functionality.
$ cat ./version_info.c #include "mpi.h" #include <stdio.h> int main (int argc, char *argv[]) { int rank, namelen; char mpi_name[MPI_MAX_LIBRARY_VERSION_STRING]; MPI_Init (&argc, &argv); MPI_Comm_rank (MPI_COMM_WORLD, &rank); MPI_Get_library_version (mpi_name, &namelen); if (rank == 0) printf ("Hello world: MPI implementation:\n %s\n", mpi_name); MPI_Finalize (); return (0); }
- For testing purposes compile the application with MPICH
$ export PATH=~/mpich/3.1.2/bin/:$PATH $ mpicc ./version_info.c -o version_info
- Check that MPI library is linked dynamically (in other case recompilation from sources is needed)
$ ldd ./version_info | grep libmpi libmpi.so.12 => /home/user/mpich/3.1.2/lib/libmpi.so.12 (0x00007f44e7c29000)
- For MPICH-3 the MPI application shows
$ mpiexec -n 2 ./version_info Hello world: MPI implementation: MPICH Version: 3.1.2 MPICH Release date: Mon Jul 21 16:00:21 CDT 2014 MPICH Device: ch3:nemesis MPICH configure: --prefix=/home/user/mpich/3.1.2/ MPICH CC: gcc -O2 MPICH CXX: g++ -O2 MPICH F77: gfortran -O2 MPICH FC: gfortran -O2
- Make Intel(R) MPI Library loaded
$ export LD_LIBRARY_PATH=/opt/intel/impi/5.0.1.035/intel64/lib/:$LD_LIBRARY_PATH $ mpiexec -n 2 ./version_info Hello world: MPI implementation: Intel(R) MPI Library 5.0 Update 1 for Linux* OS
- On step 4. only the library was changed, the rest of MPI implementation was MPICH. It is simple to change it also
$ source /opt/intel/impi/5.0.1.035/intel64/bin/mpivars.sh $ mpiexec.hydra -V Intel(R) MPI Library for Linux* OS, Version 5.0 Update 1 Build 20140709 Copyright (C) 2003-2014, Intel Corporation. All rights reserved. $ mpiexec.hydra -n 2 ./version_info Hello world: MPI implementation: Intel(R) MPI Library 5.0 Update 1 for Linux* OS
Conclusion
For evaluation of this ABI compatibility feature of Intel MPI Library one can download the Free 30-Day Evaluation Version or use Intel MPI Library Runtime Environment free of charge (with limited support options). For more details please refer to the Intel MPI Library Licensing FAQ.