<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">
A few more points from my side to MPI_Comm_disconnect 
<div class=""><br class="">
</div>
<div class="">1.) MPI_Comm_disconnect should be called from all processes in the communicator, it is a collective operation</div>
<div class="">2.) You have to disconnect/ all communicators your server is connected to.</div>
<div class=""><br class="">
</div>
<div class="">Insofar as I understand your problem: If you have connected multiple clients and the server into one intra-communicator,</div>
<div class="">you first should call com-split to get a communicator without the server. </div>
<div class=""><br class="">
</div>
<div class="">However, you still have to disconnect the old communicator (on all processes) - called "intra comm” in your example. </div>
<div class=""> </div>
<div class="">Besides, you also should disconnect all inter-communicator(s) created with MPI_Comm_connect and MPI_Comm_accept. </div>
<div class=""><br class="">
</div>
<div class="">Lena  </div>
<div class=""><br class="">
</div>
<div class=""><br class="">
<div>
<blockquote type="cite" class="">
<div class="">On Feb 29, 2016, at 9:00 AM, K. N. Ramachandran <<a href="mailto:knram06@gmail.com" class="">knram06@gmail.com</a>> wrote:</div>
<br class="Apple-interchange-newline">
<div class="">
<div dir="ltr" class="">Hello all,
<div class=""><br class="">
</div>
<div class="">I had tried just calling MPI_Comm_disconnect instead of MPI_Comm_split.</div>
<div class=""><br class="">
</div>
<div class="">I had tried this on just the server side, as well as both on the server and client, but I still see the issue of busy-wait at MPI_Finalize on the server side. Can anyone give any further inputs on this?</div>
<div class=""><br class="">
</div>
<div class="">It looks like the server process should be able to terminate early, but is held up by the client, even though they should be disconnected from each other.</div>
<div class=""><br class="">
</div>
<div class=""><br class="">
</div>
<div class="gmail_extra"><br class="">
<div class="gmail_quote">On Sat, Feb 27, 2016 at 7:00 PM, K. N. Ramachandran <span dir="ltr" class="">
<<a href="mailto:knram06@gmail.com" target="_blank" class="">knram06@gmail.com</a>></span> wrote:<br class="">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr" class="">Hi Pavan,
<div class=""><br class="">
</div>
<div class="">Thank you for the reply. I have presented only a very simplified case of one server and one client and that is why the problem looks strange.</div>
<div class=""><br class="">
</div>
<div class="">The general case is one server acting as a meeting point and N clients join the server and one intra comm is formed among them all. Then the server splits off and terminates, leaving the intracomm and then letting the clients work amongst themselves
 now.</div>
<div class=""><br class="">
</div>
<div class="">I had also tried MPI_Comm_disconnect on the server, after calling MPI_Comm_split, but even in that case, the server busy-waits for the client at Finalize. The single server and single client was only to demonstrate the problem I am facing. </div>
<div class=""><br class="">
</div>
<div class="">Please let me know if you might need more information. Thanks.</div>
<div class="gmail_extra">
<div class="">
<div class="h5"><br class="">
<div class="gmail_quote">On Sat, Feb 27, 2016 at 11:59 AM, Balaji, Pavan <span dir="ltr" class="">
<<a href="mailto:balaji@anl.gov" target="_blank" class="">balaji@anl.gov</a>></span> wrote:<br class="">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br class="">
It's unclear what exactly you are trying to do here.  Why are the clients connecting to the server and then immediately "splitting off"?<br class="">
<br class="">
Your "split-off" functionality needs to be implemented using MPI_Comm_disconnect, not using MPI_Comm_split.  Comm_split divides a communicator into smaller communicators, but all processes are still very much connected.  So as long as the server process is
 connected to the client processes, it might still receive messages from the client process and thus cannot simply exit.  Comm_disconnect, on the other hand, disconnects the client processes from the server processes.<br class="">
<br class="">
But then again, I have no idea why you are connecting to the server and disconnecting immediately.<br class="">
<br class="">
  -- Pavan<br class="">
<div class="">
<div class=""><br class="">
> On Feb 26, 2016, at 5:31 PM, K. N. Ramachandran <<a href="mailto:knram06@gmail.com" target="_blank" class="">knram06@gmail.com</a>> wrote:<br class="">
><br class="">
> Hello all,<br class="">
><br class="">
> I have recently begun working on a project that uses MPICH-3.2 and I am trying to resolve an issue where a server process busy waits at MPI_Finalize.<br class="">
><br class="">
> We are trying to create a server process that accepts incoming connections from a known number of clients (say, N clients), forms a new communicator amongst everyone (server and clients) and then splits itself from the group and terminates, so that the clients
 now only work with each other.<br class="">
><br class="">
> For very problem specific reasons, we cannot do<br class="">
> 'mpiexec -np N (other args)'<br class="">
><br class="">
> So we have a server that publishes a service name to a nameserver and clients lookup the name to join the server. The server and client processes are started with separate calls to mpiexec, one to start the server and the rest N calls to start the clients.<br class="">
><br class="">
> The server process busy-waits at the MPI_Finalize call, after it splits from the communicator and only finishes when all other clients reach their MPI_Finalize too.<br class="">
><br class="">
> Consider a simplified case of only one server and one client. The simplified pseudocode is:<br class="">
><br class="">
> Server process:<br class="">
> MPI_Init();<br class="">
> MPI_Open_port(...);<br class="">
> MPI_Publish_name(...); //publish service name to nameserver<br class="">
><br class="">
> MPI_accept(...); // accept incoming connections and store into intercomm<br class="">
> MPI_Intercomm_merge(...);  // merge new client into intra-comm<br class="">
><br class="">
> // now split the server from the client<br class="">
> MPI_Comm_rank(intra comm, rank); // rank=0<br class="">
> MPI_Comm_split(intra comm, (rank==0), rank, lone comm);<br class="">
><br class="">
> MPI_Finalize(); // busy-waits here till client's sleep duration<br class="">
><br class="">
> Client process: (simplified - assuming only one client is trying to connect)<br class="">
> MPI_Init();<br class="">
> MPI_Lookup_name(..);<br class="">
> MPI_Connect(...)<br class="">
><br class="">
> // merge<br class="">
> MPI_Intercomm_merge(...); // merge with server<br class="">
><br class="">
> // get rank and split<br class="">
> MPI_Comm_rank(intra comm, rank);  // rank=1<br class="">
> MPI_Comm_split(intra comm, rank==0, rank, lone comm);<br class="">
><br class="">
> sleep(10); // sleep for 10 seconds - causes server to busy wait at MPI_Finalize for sleep duration<br class="">
><br class="">
> MPI_Finalize(); // server and client finish here<br class="">
><br class="">
> So my questions are:<br class="">
><br class="">
> 1) Is busy-wait at MPI_Finalize the expected behaviour?<br class="">
><br class="">
> 2) How to truly "disconnect" the server, so that it can end immediately at MPI_Finalize()? I had tried MPI_Comm_disconnect (also MPI_Comm_free) on both the server and client, but that didn't help.<br class="">
><br class="">
> 3)  We don't want to see the server process consuming one core at 100% while it waits at MPI_Finalize. Are other alternatives apart from making the server process sleep, wakeup and keep polling a client, and then finally call MPI_Finalize?<br class="">
><br class="">
> Thank you for any inputs that you can give here.<br class="">
><br class="">
><br class="">
> Regards,<br class="">
> K.N.Ramachandran<br class="">
</div>
</div>
> _______________________________________________<br class="">
> discuss mailing list     <a href="mailto:discuss@mpich.org" target="_blank" class="">discuss@mpich.org</a><br class="">
> To manage subscription options or unsubscribe:<br class="">
> <a href="https://lists.mpich.org/mailman/listinfo/discuss" rel="noreferrer" target="_blank" class="">
https://lists.mpich.org/mailman/listinfo/discuss</a><br class="">
<br class="">
_______________________________________________<br class="">
discuss mailing list     <a href="mailto:discuss@mpich.org" target="_blank" class="">discuss@mpich.org</a><br class="">
To manage subscription options or unsubscribe:<br class="">
<a href="https://lists.mpich.org/mailman/listinfo/discuss" rel="noreferrer" target="_blank" class="">https://lists.mpich.org/mailman/listinfo/discuss</a><br class="">
</blockquote>
</div>
<br class="">
<br clear="all" class="">
<div class=""><br class="">
</div>
</div>
</div>
Regards,<br class="">
<div class="">
<div dir="ltr" class="">K.N.Ramachandran</div>
</div>
</div>
</div>
</blockquote>
</div>
<br class="">
<br clear="all" class="">
<div class=""><br class="">
</div>
Regards,<br class="">
<div class="gmail_signature">
<div dir="ltr" class="">K.N.Ramachandran</div>
</div>
</div>
</div>
_______________________________________________<br class="">
discuss mailing list     <a href="mailto:discuss@mpich.org" class="">discuss@mpich.org</a><br class="">
To manage subscription options or unsubscribe:<br class="">
<a href="https://lists.mpich.org/mailman/listinfo/discuss" class="">https://lists.mpich.org/mailman/listinfo/discuss</a></div>
</blockquote>
</div>
<br class="">
</div>
</body>
</html>