On Jan 10, 2014, at 9:49 AM, George Bosilca <bosi...@icl.utk.edu> wrote:

> As I said, this is the case today. There are ongoing discussion in the MPI 
> Forum to relax the wording of the MPI_Comm_free as most of the MPI 
> implementations do not rely on the strict “collective” behavior of the 
> MPI_Comm_free (in the sense that it has to be called by all processes but not 
> necessarily in same time).

That will be an interesting discussion.  I look forward to your proposal.  :-)

>> I still agree with this point, though — even though COMM_FREE is collective, 
>> you could still get into ordering / deadlock issues if you're (effectively) 
>> doing communication inside it.
> 
> As long as the call is collective and the same attributes exists on all 
> communicators I don’t see how the deadlock is possible. My wording was more a 
> precaution for the future than a restriction for today.


Here's an example:

-----
MPI Comm comm;
// comm is setup as an hcoll-enabled communicator
if (rank == x) {
    MPI_Send(..., y, tag, MPI_COMM_WORLD);
    MPI_Comm_free(comm);
} else if (rank == y) {
    MPI_Comm_free(comm);
    MPI_Recv(..., x, tag, MPI_COMM_WORLD);
}
------

If the hcoll teardown in the COMM_FREE blocks waiting for all of its peer 
COMM_FREEs in other processes in the communicator (e.g., due to blocking 
communication), rank x may block in MPI_SEND waiting for rank y's MPI_RECV, and 
therefore never invoke its COMM_FREE.

-- 
Jeff Squyres
jsquy...@cisco.com
For corporate legal information go to: 
http://www.cisco.com/web/about/doing_business/legal/cri/

Reply via email to