I want to poll the community to gather knowledge on one very basic thing: What is the standard way of launching an MPI executable program? Is this pretty universally acceptable across different clusters, different job schedulers, different hardware platform, etc.? The MPI standard since version 2.0 specifies mpiexec as the standardized name to launch MPI codes (see, e.g. standard version 4.1, sec. 12.5 “Portable MPI Process Startup”).
Background: Evidently, at this present time, there are many different ways to launch MPI programs, and although mpiexec is supposed to be a standard, even implementors and site operators do not always support this standard command name.
Since I first learned MPI, at that time the command mpirun was the prevailing way among many clusters (read: the so-called “Linux Beowulf” clusters). Then I learned afterwards that there are many variations, e.g.
-
On Cray HPC systems, they have a command-line launcher called
aprunthat users have to use to get their programs (serial and parallel, I believe) running. (Apparently now it is not quite the case anymore, see e.g. [https://support.hpe.com/hpesc/public/docDisplay?docId=a00115110en_us&docLocale=en_US&page=Parallel_Application_Launch_Service_PALS.html]( HPE Cray Programming Environment User Guide CSM on HPE Cray EX (21.03) (S-8005))).) -
On some SLURM supercomputers such as NERSC, for OpenMPI, the documentation suggests using either
srunormpirun(see: NERSC Wiki on Open MPI as of 2024-01-29). -
On PSC Bridges, I noted the use of
mpirun(not explictly, but strongly implied in the MPI Programming section.
Anyone having insight of this varying ways launching MPI jobs? Do we even have a common way? I want to use this info to build a novice-level lesson for MPI that can apply to as many HPC cluster as possible, so that the best practice will become the first memory for the learners when they have to invoke their own MPI-parallel codes.