<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:Aptos;
        panose-1:2 11 0 4 2 2 2 2 2 4;}
@font-face
        {font-family:"Lucida Grande";
        panose-1:2 11 6 0 4 5 2 2 2 4;}
@font-face
        {font-family:"Times New Roman \(Body CS\)";
        panose-1:2 11 6 4 2 2 2 2 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
span.EmailStyle19
        {mso-style-type:personal-reply;
        font-family:"Lucida Grande",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;
        mso-ligatures:none;}
@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="#467886" vlink="#96607D" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-family:"Lucida Grande",sans-serif">I haven’t run the code, but shouldn’t the workers pass 0 (rank of master) as the root instead of MPI_PROC_NULL?
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Lucida Grande",sans-serif"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Lucida Grande",sans-serif">Rajeev<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Lucida Grande",sans-serif"><o:p> </o:p></span></p>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="color:black">From: </span></b><span style="color:black">"Mccall, Kurt E. (MSFC-EV41) via discuss" <discuss@mpich.org><br>
<b>Reply-To: </b>"discuss@mpich.org" <discuss@mpich.org><br>
<b>Date: </b>Sunday, April 21, 2024 at 4:53 PM<br>
<b>To: </b>"discuss@mpich.org" <discuss@mpich.org><br>
<b>Cc: </b>"Mccall, Kurt E. (MSFC-EV41)" <kurt.e.mccall@nasa.gov><br>
<b>Subject: </b>[mpich-discuss] MPI_Reduce on an inter-communicator hangs</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Aptos",sans-serif"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="mso-line-height-alt:.75pt"><span style="font-size:1.0pt;color:white">I am calling MPI_Reduce on a set of inter-communicators created by MPI_Comm_spawn, each with one process in the local group (the single manager) and two processes
 in the remote group (the workers). The inter- communicators are visited one at <o:p>
</o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="mso-line-height-alt:.75pt"><span style="font-size:1.0pt;color:white">ZjQcmQRYFpfptBannerStart<o:p></o:p></span></p>
</div>
<table class="MsoNormalTable" border="0" cellspacing="0" cellpadding="0" width="100%" style="width:100.0%;border-radius:4px">
<tbody>
<tr>
<td style="padding:12.0pt 0in 12.0pt 0in">
<table class="MsoNormalTable" border="1" cellspacing="0" cellpadding="0" width="100%" style="width:100.0%;background:#D0D8DC;border:none;border-top:solid #90A4AE 3.0pt">
<tbody>
<tr>
<td valign="top" style="border:none;padding:0in 7.5pt 3.75pt 4.5pt">
<table class="MsoNormalTable" border="0" cellspacing="0" cellpadding="0" align="left">
<tbody>
<tr>
<td style="padding:3.0pt 6.0pt 3.0pt 6.0pt">
<p class="MsoNormal"><b><span style="font-size:10.5pt;font-family:"Arial",sans-serif;color:black">This Message Is From an External Sender
<o:p></o:p></span></b></p>
</td>
</tr>
<tr>
<td style="padding:3.0pt 6.0pt 3.0pt 6.0pt">
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Arial",sans-serif;color:black">This message came from outside your organization.
<o:p></o:p></span></p>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<div>
<p class="MsoNormal" style="mso-line-height-alt:.75pt"><span style="font-size:1.0pt;color:white">ZjQcmQRYFpfptBannerEnd</span><span style="font-size:1.0pt;font-family:"Aptos",sans-serif;color:white"><o:p></o:p></span></p>
</div>
<p class="MsoNormal">I am calling MPI_Reduce on a set of inter-communicators created by MPI_Comm_spawn,  each with one
<o:p></o:p></p>
<p class="MsoNormal">process in the local group (the single manager) and two processes in the remote group (the workers).    The inter-<o:p></o:p></p>
<p class="MsoNormal">communicators are visited one at a time in the manager.<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">All workers enter and exit MPI_Reduce without blocking,  but the manager enters the first MPI_Reduce for the
<o:p></o:p></p>
<p class="MsoNormal">first inter-communicator and never returns.   What am I doing wrong?   I am using MPICH 4.1.2.<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">Here is my manager code:<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal"><b>#define N_PROC 4</b><o:p></o:p></p>
<p class="MsoNormal"><b>#define N_IN_GROUP 2</b><o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal"><b>int main(int argc, char *argv[])</b><o:p></o:p></p>
<p class="MsoNormal"><b>{   </b><o:p></o:p></p>
<p class="MsoNormal"><b>    int rank, world_size, error_codes[N_PROC];</b><o:p></o:p></p>
<p class="MsoNormal"><b>    MPI_Comm intercoms[N_PROC];</b><o:p></o:p></p>
<p class="MsoNormal"><b>    char hostname[64];</b><o:p></o:p></p>
<p class="MsoNormal"><b>    </b><o:p></o:p></p>
<p class="MsoNormal"><b>    MPI_Init(&argc, &argv);</b><o:p></o:p></p>
<p class="MsoNormal"><b>    MPI_Comm_rank(MPI_COMM_WORLD, &rank);</b><o:p></o:p></p>
<p class="MsoNormal"><b>    MPI_Comm_size(MPI_COMM_WORLD, &world_size);</b><o:p></o:p></p>
<p class="MsoNormal"><b>     </b><o:p></o:p></p>
<p class="MsoNormal"><b>    gethostname(hostname, sizeof(hostname));</b><o:p></o:p></p>
<p class="MsoNormal"><b>    char *p = strstr(hostname, ".");</b><o:p></o:p></p>
<p class="MsoNormal"><b>    *p = '\0';</b><o:p></o:p></p>
<p class="MsoNormal"><b> </b><o:p></o:p></p>
<p class="MsoNormal"><b>    MPI_Info info;</b><o:p></o:p></p>
<p class="MsoNormal"><b>    MPI_Info_create(&info);</b><o:p></o:p></p>
<p class="MsoNormal"><b>    MPI_Info_set(info, "host", hostname);</b><o:p></o:p></p>
<p class="MsoNormal"><b>    MPI_Info_set(info, "bind_to", "core");</b><o:p></o:p></p>
<p class="MsoNormal"><b> </b><o:p></o:p></p>
<p class="MsoNormal"><b>    for (int i = 0; i < N_PROC; ++i)</b><o:p></o:p></p>
<p class="MsoNormal"><b>    {</b><o:p></o:p></p>
<p class="MsoNormal"><b>        MPI_Comm_spawn("test_reduce_work", argv, N_IN_GROUP, info,</b><o:p></o:p></p>
<p class="MsoNormal"><b>            0, MPI_COMM_SELF, &intercoms[i], &error_codes[i]);</b><o:p></o:p></p>
<p class="MsoNormal"><b>    }</b><o:p></o:p></p>
<p class="MsoNormal"><b> </b><o:p></o:p></p>
<p class="MsoNormal"><b>    sleep(10);</b><o:p></o:p></p>
<p class="MsoNormal"><b> </b><o:p></o:p></p>
<p class="MsoNormal"><b>    unsigned array[100]{0};</b><o:p></o:p></p>
<p class="MsoNormal"><b> </b><o:p></o:p></p>
<p class="MsoNormal"><b>    for (int i = 0; i < N_PROC; ++i)</b><o:p></o:p></p>
<p class="MsoNormal"><b>    {</b><o:p></o:p></p>
<p class="MsoNormal"><b>        cout << "MANAGER: starting reduction " << i << "\n";</b><o:p></o:p></p>
<p class="MsoNormal"><b> </b><o:p></o:p></p>
<p class="MsoNormal"><b>        MPI_Reduce(NULL, array, 100, MPI_UNSIGNED, MPI_SUM, MPI_ROOT,</b><o:p></o:p></p>
<p class="MsoNormal"><b>            intercoms[i]);</b><o:p></o:p></p>
<p class="MsoNormal"><b> </b><o:p></o:p></p>
<p class="MsoNormal"><b>        cout << "MANAGER: finished reduction " << i << "\n";   // we never reach this point</b><o:p></o:p></p>
<p class="MsoNormal"><b>    }</b><o:p></o:p></p>
<p class="MsoNormal"><b> </b><o:p></o:p></p>
<p class="MsoNormal"><b>    for (int i = 0; i < 100; ++i) cout << array[i] << " ";</b><o:p></o:p></p>
<p class="MsoNormal"><b>    cout << endl;</b><o:p></o:p></p>
<p class="MsoNormal"><b> </b><o:p></o:p></p>
<p class="MsoNormal"><b>    MPI_Finalize();</b><o:p></o:p></p>
<p class="MsoNormal"><b>}</b><o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">And here is my worker code:<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal"><b>int main(int argc, char *argv[])</b><o:p></o:p></p>
<p class="MsoNormal"><b>{   </b><o:p></o:p></p>
<p class="MsoNormal"><b>    int rank, world_size;</b><o:p></o:p></p>
<p class="MsoNormal"><b>    MPI_Comm manager_intercom;</b><o:p></o:p></p>
<p class="MsoNormal"><b> </b><o:p></o:p></p>
<p class="MsoNormal"><b>    MPI_Init(&argc, &argv);</b><o:p></o:p></p>
<p class="MsoNormal"><b>    MPI_Comm_rank(MPI_COMM_WORLD, &rank);</b><o:p></o:p></p>
<p class="MsoNormal"><b>    MPI_Comm_size(MPI_COMM_WORLD, &world_size);</b><o:p></o:p></p>
<p class="MsoNormal"><b> </b><o:p></o:p></p>
<p class="MsoNormal"><b>    MPI_Comm_get_parent(&manager_intercom);</b><o:p></o:p></p>
<p class="MsoNormal"><b> </b><o:p></o:p></p>
<p class="MsoNormal"><b>    unsigned array[100]{1};</b><o:p></o:p></p>
<p class="MsoNormal"><b> </b><o:p></o:p></p>
<p class="MsoNormal"><b>    cout << "WORKER: starting reduction\n";</b><o:p></o:p></p>
<p class="MsoNormal"><b> </b><o:p></o:p></p>
<p class="MsoNormal"><b>    MPI_Reduce(array, NULL, 100,  MPI_UNSIGNED, MPI_SUM, MPI_PROC_NULL,
</b><o:p></o:p></p>
<p class="MsoNormal"><b>        manager_intercom);</b><o:p></o:p></p>
<p class="MsoNormal"><b> </b><o:p></o:p></p>
<p class="MsoNormal"><b>    cout << "WORKER: finishing reduction\n";</b><o:p></o:p></p>
<p class="MsoNormal"><b> </b><o:p></o:p></p>
<p class="MsoNormal"><b>    sleep(10);</b><o:p></o:p></p>
<p class="MsoNormal"><b> </b><o:p></o:p></p>
<p class="MsoNormal"><b>    MPI_Finalize();</b><o:p></o:p></p>
<p class="MsoNormal"><b>}</b><o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">Finally, here it the invocation:<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>
<p class="MsoNormal"><b>$ mpiexec -launcher ssh -print-all-exitcodes -wdir /home/kmccall/test_dir -np 1 -ppn 1 test_reduce_man</b><o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">Thanks,<o:p></o:p></p>
<p class="MsoNormal">Kurt<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
</div>
</body>
</html>