1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280
|
<!DOCTYPE html>
<html class="writer-html5" lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>10.11. Unusual jobs — Open MPI 5.0.8 documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../_static/css/theme.css" />
<!--[if lt IE 9]>
<script src="../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/sphinx_highlight.js"></script>
<script src="../_static/js/theme.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="10.12. Troubleshooting" href="troubleshooting.html" />
<link rel="prev" title="10.10. Launching with Grid Engine" href="gridengine.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../index.html" class="icon icon-home">
Open MPI
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../quickstart.html">1. Quick start</a></li>
<li class="toctree-l1"><a class="reference internal" href="../getting-help.html">2. Getting help</a></li>
<li class="toctree-l1"><a class="reference internal" href="../release-notes/index.html">3. Release notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../installing-open-mpi/index.html">4. Building and installing Open MPI</a></li>
<li class="toctree-l1"><a class="reference internal" href="../features/index.html">5. Open MPI-specific features</a></li>
<li class="toctree-l1"><a class="reference internal" href="../validate.html">6. Validating your installation</a></li>
<li class="toctree-l1"><a class="reference internal" href="../version-numbering.html">7. Version numbers and compatibility</a></li>
<li class="toctree-l1"><a class="reference internal" href="../mca.html">8. The Modular Component Architecture (MCA)</a></li>
<li class="toctree-l1"><a class="reference internal" href="../building-apps/index.html">9. Building MPI applications</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="index.html">10. Launching MPI applications</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="quickstart.html">10.1. Quick start: Launching MPI applications</a></li>
<li class="toctree-l2"><a class="reference internal" href="prerequisites.html">10.2. Prerequisites</a></li>
<li class="toctree-l2"><a class="reference internal" href="pmix-and-prrte.html">10.3. The role of PMIx and PRRTE</a></li>
<li class="toctree-l2"><a class="reference internal" href="scheduling.html">10.4. Scheduling processes across hosts</a></li>
<li class="toctree-l2"><a class="reference internal" href="localhost.html">10.5. Launching only on the local node</a></li>
<li class="toctree-l2"><a class="reference internal" href="ssh.html">10.6. Launching with SSH</a></li>
<li class="toctree-l2"><a class="reference internal" href="slurm.html">10.7. Launching with Slurm</a></li>
<li class="toctree-l2"><a class="reference internal" href="lsf.html">10.8. Launching with LSF</a></li>
<li class="toctree-l2"><a class="reference internal" href="tm.html">10.9. Launching with PBS / Torque</a></li>
<li class="toctree-l2"><a class="reference internal" href="gridengine.html">10.10. Launching with Grid Engine</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">10.11. Unusual jobs</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#running-non-mpi-programs-with-mpirun-1">10.11.1. Running non-MPI programs with <span class="xref std std-ref">mpirun(1)</span></a></li>
<li class="toctree-l3"><a class="reference internal" href="#running-gui-applications">10.11.2. Running GUI applications</a></li>
<li class="toctree-l3"><a class="reference internal" href="#running-curses-based-applications">10.11.3. Running curses-based applications</a></li>
<li class="toctree-l3"><a class="reference internal" href="#launching-an-mpmd-mpi-job">10.11.4. Launching an MPMD MPI job</a></li>
<li class="toctree-l3"><a class="reference internal" href="#connecting-independent-mpi-applications">10.11.5. Connecting independent MPI applications</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="troubleshooting.html">10.12. Troubleshooting</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../tuning-apps/index.html">11. Run-time operation and tuning MPI applications</a></li>
<li class="toctree-l1"><a class="reference internal" href="../app-debug/index.html">12. Debugging Open MPI Parallel Applications</a></li>
<li class="toctree-l1"><a class="reference internal" href="../developers/index.html">13. Developer’s guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="../contributing.html">14. Contributing to Open MPI</a></li>
<li class="toctree-l1"><a class="reference internal" href="../license/index.html">15. License</a></li>
<li class="toctree-l1"><a class="reference internal" href="../history.html">16. History of Open MPI</a></li>
<li class="toctree-l1"><a class="reference internal" href="../man-openmpi/index.html">17. Open MPI manual pages</a></li>
<li class="toctree-l1"><a class="reference internal" href="../man-openshmem/index.html">18. OpenSHMEM manual pages</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">Open MPI</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item"><a href="index.html"><span class="section-number">10. </span>Launching MPI applications</a></li>
<li class="breadcrumb-item active"><span class="section-number">10.11. </span>Unusual jobs</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/launching-apps/unusual.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<style>
.wy-table-responsive table td,.wy-table-responsive table th{white-space:normal}
</style><div class="section" id="unusual-jobs">
<h1><span class="section-number">10.11. </span>Unusual jobs<a class="headerlink" href="#unusual-jobs" title="Permalink to this heading"></a></h1>
<p>Open MPI can run many types of applications, including non-MPI programs.
This section describes some of the less common kinds of programs that can
be executed.</p>
<div class="section" id="running-non-mpi-programs-with-mpirun-1">
<h2><span class="section-number">10.11.1. </span>Running non-MPI programs with <a class="reference internal" href="../man-openmpi/man1/mpirun.1.html#man1-mpirun"><span class="std std-ref">mpirun(1)</span></a><a class="headerlink" href="#running-non-mpi-programs-with-mpirun-1" title="Permalink to this heading"></a></h2>
<p>Non-MPI programs can be launched with <a class="reference internal" href="../man-openmpi/man1/mpirun.1.html#man1-mpirun"><span class="std std-ref">mpirun(1)</span></a>,
for example:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>shell$ mpirun -n 2 --host a,b uptime
</pre></div>
</div>
<p>This will launch a copy of the Unix command <code class="docutils literal notranslate"><span class="pre">uptime</span></code> on the hosts <code class="docutils literal notranslate"><span class="pre">a</span></code>
and <code class="docutils literal notranslate"><span class="pre">b</span></code>.</p>
<p><a class="reference internal" href="../man-openmpi/man1/mpirun.1.html#man1-mpirun"><span class="std std-ref">mpirun(1)</span></a> works equally well for MPI and non-MPI
applications.</p>
</div>
<div class="section" id="running-gui-applications">
<h2><span class="section-number">10.11.2. </span>Running GUI applications<a class="headerlink" href="#running-gui-applications" title="Permalink to this heading"></a></h2>
<p>Running GUI applications depends on your local setup and may require additional
setup.</p>
<p>You will need to have graphics forwarding (e.g., X11
forwarding) enabled from the remote processes to the display where you
want output to appear. In a secure environment, you can simply allow
all X requests to be shown on the target display and set the
<code class="docutils literal notranslate"><span class="pre">DISPLAY</span></code> environment variable in all MPI processes’ environments to
the target display, perhaps something like this:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>shell$ hostname
my_desktop.secure-cluster.example.com
shell$ xhost +
shell$ mpirun -n 4 -x DISPLAY=my_desktop.secure-cluster.example.com a.out
</pre></div>
</div>
<p>However, this technique is not generally suitable for unsecure
environments (because it allows anyone to read and write to your
display). A slightly more secure way is to only allow X connections
from the nodes where your application will be running:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>shell$ hostname
my_desktop.secure-cluster.example.com
shell$ xhost +compute1 +compute2 +compute3 +compute4
compute1 being added to access control list
compute2 being added to access control list
compute3 being added to access control list
compute4 being added to access control list
shell$ mpirun -n 4 -x DISPLAY=my_desktop.secure-cluster.example.com a.out
</pre></div>
</div>
<p>(assuming that the four nodes you are running on are <code class="docutils literal notranslate"><span class="pre">compute1</span></code>
through <code class="docutils literal notranslate"><span class="pre">compute4</span></code>).</p>
<p>Other methods are available, but they involve sophisticated X
forwarding through <a class="reference internal" href="../man-openmpi/man1/mpirun.1.html#man1-mpirun"><span class="std std-ref">mpirun(1)</span></a> and are generally
more complicated than desirable.</p>
</div>
<div class="section" id="running-curses-based-applications">
<h2><span class="section-number">10.11.3. </span>Running curses-based applications<a class="headerlink" href="#running-curses-based-applications" title="Permalink to this heading"></a></h2>
<p>Open MPI provides fairly sophisticated stdin / stdout / stderr
forwarding. However, it does not work well with curses, ncurses,
readline, or other sophisticated I/O packages that generally require
direct control of the terminal.</p>
<p>Every application and I/O library is different — you should try to
see if yours is supported. But chances are that it won’t work.</p>
</div>
<div class="section" id="launching-an-mpmd-mpi-job">
<h2><span class="section-number">10.11.4. </span>Launching an MPMD MPI job<a class="headerlink" href="#launching-an-mpmd-mpi-job" title="Permalink to this heading"></a></h2>
<p>Open MPI supports multiple program, multiple data (MPMD) style launches,
either from the command line or from a file. For example:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>shell$ mpirun -n 2 a.out : -n 2 b.out
</pre></div>
</div>
<p>This will launch a single parallel application, but the first two
processes will be instances of the <code class="docutils literal notranslate"><span class="pre">a.out</span></code> executable, and the
second two processes will be instances of the <code class="docutils literal notranslate"><span class="pre">b.out</span></code> executable.
In MPI terms, this will be a single <code class="docutils literal notranslate"><span class="pre">MPI_COMM_WORLD</span></code>, but the
<code class="docutils literal notranslate"><span class="pre">a.out</span></code> processes will be ranks 0 and 1 in <code class="docutils literal notranslate"><span class="pre">MPI_COMM_WORLD</span></code>, while
the <code class="docutils literal notranslate"><span class="pre">b.out</span></code> processes will be ranks 2 and 3 in <code class="docutils literal notranslate"><span class="pre">MPI_COMM_WORLD</span></code>.</p>
<p><a class="reference internal" href="../man-openmpi/man1/mpirun.1.html#man1-mpirun"><span class="std std-ref">mpirun(1)</span></a> can also accept a parallel application
specified in a file instead of on the command line. For example:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>shell$ mpirun --app my_appfile
</pre></div>
</div>
<p>where the file <code class="docutils literal notranslate"><span class="pre">my_appfile</span></code> contains the following:</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span><span class="c1"># Comments are supported; comments begin with #</span>
<span class="c1"># Application context files specify each sub-application in the</span>
<span class="c1"># parallel job, one per line. The first sub-application is the 2</span>
<span class="c1"># a.out processes:</span>
-n<span class="w"> </span><span class="m">2</span><span class="w"> </span>a.out
<span class="c1"># The second sub-application is the 2 b.out processes:</span>
-n<span class="w"> </span><span class="m">2</span><span class="w"> </span>b.out
</pre></div>
</div>
<p>This will result in the same behavior as running <code class="docutils literal notranslate"><span class="pre">a.out</span></code> and <code class="docutils literal notranslate"><span class="pre">b.out</span></code>
from the command line.</p>
</div>
<div class="section" id="connecting-independent-mpi-applications">
<h2><span class="section-number">10.11.5. </span>Connecting independent MPI applications<a class="headerlink" href="#connecting-independent-mpi-applications" title="Permalink to this heading"></a></h2>
<p>In certain environments, Open MPI supports connecting multiple,
independent MPI applications using mechanism defined in the MPI
specification such as <code class="docutils literal notranslate"><span class="pre">MPI_Comm_connect()</span> <span class="pre">/</span> <span class="pre">MPI_Comm_accept()</span></code> and
publishing connection information using <code class="docutils literal notranslate"><span class="pre">MPI_Publish_name()</span> <span class="pre">/</span>
<span class="pre">MPI_Lookup_name()</span></code>. These mechanisms require a centralized service
to exchange contact information across multiple jobs.</p>
<p>Beginning with Open MPI v5.0.0 this can be achieved by starting an
instance of the prte server with the <code class="docutils literal notranslate"><span class="pre">report-uri</span></code> option to
display the contact information of the prte server. This information
can then be used for launching subsequent MPI applications.</p>
<p>The following commands show an example for launching two MPI jobs
that will connect to each other at runtime using the MPI-2 based
functionality.</p>
<p>Step 1: start the standalone prte server</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>user@myhost:~/ompi-install/bin$ ./prte --report-uri <filename>
DVM ready
</pre></div>
</div>
<p>Step 2: Launch the first MPI application providing the uri of the
prte server</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>user@myhost:~/app1-dir$ mpiexec --dvm file:<filename> -np 4 ./mpi_app_1
</pre></div>
</div>
<p>Step 3: Launch the second MPI application providing the uri of the
prte server again</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>user@myhost:~/app2-dir$ mpiexec --dvm file:<filename> -np 4 ./mpi_app_2
</pre></div>
</div>
<p>In case the prte server has been started as a system server using the
<code class="docutils literal notranslate"><span class="pre">--system-server</span></code> argument (e.g. the nodes used by the MPI
applications are not shared by multiple jobs), the sequence can be
simplified by using <code class="docutils literal notranslate"><span class="pre">mpiexec</span> <span class="pre">--dvm</span> <span class="pre">system</span></code> or <code class="docutils literal notranslate"><span class="pre">mpiexec</span> <span class="pre">--dvm</span>
<span class="pre">system-first</span></code> instead of the uri of the prte server.</p>
</div>
</div>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="gridengine.html" class="btn btn-neutral float-left" title="10.10. Launching with Grid Engine" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="troubleshooting.html" class="btn btn-neutral float-right" title="10.12. Troubleshooting" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>© Copyright 2003-2025, The Open MPI Community.
<span class="lastupdated">Last updated on 2025-05-30 16:41:43 UTC.
</span></p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>
|