I have inherited an application with a makefile that supports the use of MPI for parallelization. Toward the end of the make procedure, the make fails due to the mpif90 command not being found. I have installed openmpi-bin (I am using Ubuntu 16.04), but that might have been pointless.
Could someone provide me with a link to enabling MPI with ifort? Or perhaps some common pitfalls that I should look for.
I searched for information on this forum, and a couple of the threads mention an openmpi zipped tarball that needs to be extracted and built, but I do not see one anywhere.
first of all, Intel ships its own MPI implementation, so there is in principle no need to install OpenMPI or MPICH yourself. The MPI command for Fortran is usually mpifort, not mpif90.
Actually, it should be mpiifort. But indeed, there are some pecularities. In the tarball for the 2019beta version that I downloaded there is besides the linux/intel64/bin also a directory with mpi binaries compilers_and_libraries_2019.0.046/linux/mpi/intel64/bin/mpiifort together with a script to set all the environments. In the prepackaged (official) versions there is also such a directory but only these files:
cpuinfo hydra_persist IMB-NBC Llama mpicleanup mpiexec.hydra mpitune mpivars.sh tune
hydra_nameserver IMB-MPI1 IMB-RMA llamaMPIClient.py mpiexec mpirun mpivars.csh pmi_proxy
This looks a little bit strange to me. I fear that someone from Intel has to answer whether the official tarballs don't contain the mpi-versions of the compiler.
source /opt/intel/bin/compilervars.sh intel64
sets both parallel and serial paths i.e.
I am using 2018 update 2.
I'm surprised no one mentioned that only the high priced cluster studio version of released Intel parallel studio includes the full Intel MPI. ifort by itself includes only the coarray support version of MPI. For that reason it's common to build openmpi or some other open source MPI against ifort. I don't know of any MPI other than openmpi which names its wrapper mpifort, not any other than Intel MPI which has a separate ifort wrapper named mpiifort along with a gfortran wrapper named mpif90.
Thank you, everyone, for taking the time to respond.
I had tried mpiifort as well, but I think the later posts get to the heart of the matter. I am using a no-longer-supported version of Intel version 16, and our original license was for the "lowest-end" compiler because the project did not expect to use parallelization. I did find compilervars.sh and, on my Ubuntu 16.04 server with multiple CPUs, I entered:
./intel/bin/compilervars.sh -arch intel64 -platform linux
The mpiifort (heh, I tried both spellings) command is still not recognized. Given the license that I am currently using, would further efforts be worthwhile? The need at the moment is to improve performance by about a factor of 6, and we have a machine with several times that many CPUs at our disposal.
One more question: I will offer the task manager the option of buying a license with full MPI support. I know that the budget is limited, but perhaps an institutional purchase can be made. She will ask the following reasonable question: Would we be paying for something that gfortran already offers? Based on what factors might she be making a "buy" decision rather than reverting to gfortran, which the prior developer was using?
As Tim P. mentioned unless you have a parallel studio license, you will not have full MPI support.
You can use openmpi-gfortran instead which will speedup your program compared to serial code.
Unless you are using intel specific libraries, the code should compile without any problems. About buying a MPI-supported license, it all boils down to money-vs-time. Sure intel-mpi might give you speed up over openmpi-gfortran, but by what factor! All these you have to consider. I would love to hear what others have to say.
If anyone from Intel would like to send me a quote for a single-user license with full MPI support, I'm "all eyes". I think my email address is in my profile.
In the meantime, I have begun looking at gfortran MPI.
I don't think gfortran includes MPI, but there are a couple of open-source MPI implementations you can use. You can also use these with Intel Fortran, such as OpenMPI or mpich2.
As Tim says, only the "Cluster Edition" of Intel Parallel Studio XE includes Intel MPI development support. I never understood why Intel MPI was an extra-cost option, but it is. You can buy it separately if you want.
I don't think anyone here can "send you a quote". If your organization has an Intel sales rep assigned, ping her or him. Alternatively you can see prices at https://softwarestore.intel.com/ProductSelector/Parallel%20Studio/Cluster and clicking through.
I installed the updated beta release of ifort 19, which has MPI support among other features. Not surprised, but 'mpiifort' is not recognized "out of the box". What's a good resource on activating MPI support, e.g., a link?
I think you're mistaken that ifort 19 "includes MPI support". It includes the MPI run-time library to support coarrays, but not what you need to put MPI calls into your program (or use mpifort).
The application has MPI calls already, though by default MPI is not used. So any links to information about Intel's MPI run-time library, as well as program and compilation requirements would be most appreciated.
Unless it has changed recently, Intel MPI requires both the compilervars and the mpivars scripts to be sourced before using MPI. Likewise, if you build an open source MPI correctly, it will not be present on default paths. If you set up MPI so that it doesn't require its own path settings, you will not be able to install another MPI in case you require a choice of mpi implementations or compilers. For example, the MPI which comes with linux should not be installed unless you will use that one with gfortran exclusively (and it may be outdated). Intel MPI gives you a choice between gfortran (mpif90) and ifort (mpiifort), priovided that you have installed both compilers.
I thought the offering of Intel MPI separately from combined Intel Fortran and C++ had gone away long ago.
A possible problem with open source MPI: you would not likely be able (AFAIK) to use ifort coarrays while a non-Intel MPI is set up on path. Explicit support of combined MPI and coarrays was a selling point of some proprietary coarray implementations and might be possible with gfortran when it is built for the specific MPI you use.
Only the shared library support for Intel MPI is provided, and none of the include or module files. You would need the full Intel MPI install, which is part of the Cluster Edition of Parallel Studio XE, to be able to build MPI applications using Intel MPI.
Coarrays can be used with some non-Intel MPI implementations, though it is not a supported combination. I am not going into the details at this time as I don't think it's relevant.
Would you or anyone here know if the version 19 beta encompasses the Cluster Edition? Alternatively, how I can determine that, e.g., the presence or absence of a specific file or directory?
Yes, the beta version contains the cluster edition and also vtune etc. Search for compilers_and_libraries_2019.0.070/linux/mpi. This directory should contain binaries mpif90, mpiifort, mpiicc etc. If they are not there, but only mpirun, mpiexec, then you don't have the cluster edition.
Right. I tested the first v19 beta on a project that is no longer under active development. For this application, we want to see what performance gains we would get with MPI -- in which case we would purchase the license.