<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Preformatted Char";
        margin:0in;
        font-size:10.0pt;
        font-family:"Courier New";}
span.HTMLPreformattedChar
        {mso-style-name:"HTML Preformatted Char";
        mso-style-priority:99;
        mso-style-link:"HTML Preformatted";
        font-family:"Consolas",serif;}
span.EmailStyle21
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style>
</head>
<body lang="EN-US" link="blue" vlink="purple" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal">If Joe has interpreted your need correctly, I’ll second the suggestion of pdsh – it’s simple, it works pretty well, it’s “transport” independent (I use it to manage a cluster of beagleboards over WiFi).  Typically I wind up with a shell
 script on the head node and some shell scripts on the worker nodes, and the head node script fires pdsh, which starts the worker bee scripts.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:12.0pt;color:black">From: </span></b><span style="font-size:12.0pt;color:black">Beowulf <beowulf-bounces@beowulf.org> on behalf of Joe Landman <joe.landman@gmail.com><br>
<b>Date: </b>Friday, November 20, 2020 at 2:03 PM<br>
<b>To: </b>"beowulf@beowulf.org" <beowulf@beowulf.org><br>
<b>Subject: </b>[EXTERNAL] Re: [Beowulf] perl with OpenMPI gotcha?<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<p><o:p> </o:p></p>
<div>
<p class="MsoNormal">On 11/20/20 4:43 PM, David Mathog wrote:<o:p></o:p></p>
</div>
<p>[...]<o:p></o:p></p>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<p class="MsoNormal"><br>
Also, searching turned up very little information on using MPI with perl. <br>
(Lots on using MPI with other languages of course.) <br>
The Parallel::MPI::Simple module is itself almost a decade old. <br>
We have a batch manager but I would prefer not to use it in this case. <br>
Is there some library/method other than MPI which people typically use these days for this sort of compute cluster process control with Perl from the head node?
<o:p></o:p></p>
</blockquote>
<p><o:p> </o:p></p>
<p>I can't say I've ever used Perl and MPI.  I suppose it is doable, but if you were doing it, I'd recommend encapsulating it with FFI::Platypus (<a href="https://urldefense.us/v3/__https:/metacpan.org/pod/FFI::Platypus__;!!PvBDto6Hs4WbVuu7!afgHh9iIgQExswMZG_DhAJu2PzyrdLg5Tc8j9Dnc3LdGZ9ujD927YjcLBxKWv7faIxt-IWQ$">https://metacpan.org/pod/FFI::Platypus</a>).<o:p></o:p></p>
<p>This however, doesn't seem tp be your problem per se.  Your problem sounds like "how do I launch a script on N compute nodes at once, and wait for it to complete".<br>
<br>
If I have that correct, then you want to learn about pdsh (<a href="https://urldefense.us/v3/__https:/github.com/chaos/pdsh__;!!PvBDto6Hs4WbVuu7!afgHh9iIgQExswMZG_DhAJu2PzyrdLg5Tc8j9Dnc3LdGZ9ujD927YjcLBxKWv7fa6GA3YiQ$">https://github.com/chaos/pdsh</a> and
 info here: <a href="https://urldefense.us/v3/__https:/www.rittmanmead.com/blog/2014/12/linux-cluster-sysadmin-parallel-command-execution-with-pdsh/__;!!PvBDto6Hs4WbVuu7!afgHh9iIgQExswMZG_DhAJu2PzyrdLg5Tc8j9Dnc3LdGZ9ujD927YjcLBxKWv7fatAD11t0$">
https://www.rittmanmead.com/blog/2014/12/linux-cluster-sysadmin-parallel-command-execution-with-pdsh/</a> ).<o:p></o:p></p>
<p>I write most of my admin scripts in perl, and you can use pdsh as a function within them.
<o:p></o:p></p>
<p>However ...<o:p></o:p></p>
<p>MCE::Loop is your friend.<o:p></o:p></p>
<p>Combine that with something like this:<o:p></o:p></p>
<p>    $mounts=`ssh -o ConnectTimeout=20 $node grep o2ib /proc/mounts`;<o:p></o:p></p>
<p>and you can get pdsh-like control directly in Perl without invoking pdsh.<o:p></o:p></p>
<p>The general template looks like this:<o:p></o:p></p>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<p>#!/usr/bin/env perl<br>
<br>
use strict;<br>
use MCE::Loop;<br>
 <br>
MCE::Loop->init(<br>
   max_workers => 25, chunk_size => 1<br>
);<br>
 <br>
my $nfile=shift;  <br>
<br>
# grab file contents into @nodes array<br>
my @nodes;<br>
chomp(@nodes = split(/\n/,`cat $nfile`));<br>
<br>
# looping over nodes, max_workers at a time<br>
mce_loop {<br>
   my ($mce, $chunk_ref, $chunk_id) = @_;<br>
   # do stuff to node $_<br>
} @nodes;<o:p></o:p></p>
</blockquote>
<p><o:p> </o:p></p>
<p>This will run 25 copies (max_workers) of the loop body over the @nodes array.  Incorporate the ssh bit above in the #do stuff area, and you get basically what I think you are asking for.<o:p></o:p></p>
<p>FWIW, I've been using this pattern for a few years, most recently on large supers over the past few months.<o:p></o:p></p>
<p><o:p> </o:p></p>
<p><o:p> </o:p></p>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<p class="MsoNormal"><br>
Thanks, <br>
<br>
David Mathog <br>
<br>
<br>
<br>
_______________________________________________ <br>
Beowulf mailing list, <a href="mailto:Beowulf@beowulf.org">Beowulf@beowulf.org</a> sponsored by Penguin Computing
<br>
To change your subscription (digest mode or unsubscribe) visit <a href="https://urldefense.us/v3/__https:/beowulf.org/cgi-bin/mailman/listinfo/beowulf__;!!PvBDto6Hs4WbVuu7!afgHh9iIgQExswMZG_DhAJu2PzyrdLg5Tc8j9Dnc3LdGZ9ujD927YjcLBxKWv7fafXgrJN4$">
https://beowulf.org/cgi-bin/mailman/listinfo/beowulf</a> <o:p></o:p></p>
</blockquote>
<pre>-- <o:p></o:p></pre>
<pre>Joe Landman<o:p></o:p></pre>
<pre>e: <a href="mailto:joe.landman@gmail.com">joe.landman@gmail.com</a><o:p></o:p></pre>
<pre>t: @hpcjoe<o:p></o:p></pre>
<pre>w: <a href="https://urldefense.us/v3/__https:/scalability.org__;!!PvBDto6Hs4WbVuu7!afgHh9iIgQExswMZG_DhAJu2PzyrdLg5Tc8j9Dnc3LdGZ9ujD927YjcLBxKWv7faOt9Xj2U$">https://scalability.org</a><o:p></o:p></pre>
<pre>g: <a href="https://urldefense.us/v3/__https:/github.com/joelandman__;!!PvBDto6Hs4WbVuu7!afgHh9iIgQExswMZG_DhAJu2PzyrdLg5Tc8j9Dnc3LdGZ9ujD927YjcLBxKWv7faYVvpwqA$">https://github.com/joelandman</a><o:p></o:p></pre>
<pre>l: <a href="https://urldefense.us/v3/__https:/www.linkedin.com/in/joelandman__;!!PvBDto6Hs4WbVuu7!afgHh9iIgQExswMZG_DhAJu2PzyrdLg5Tc8j9Dnc3LdGZ9ujD927YjcLBxKWv7famxaMBkU$">https://www.linkedin.com/in/joelandman</a><o:p></o:p></pre>
</div>
</body>
</html>