Jim, OK, my attempt at answering below. See if you agree with my annotations.
-Tony Anthony Skjellum, PhD Professor of Computer Science and Chair of Excellence Director, SimCenter University of Tennessee at Chattanooga (UTC) tony-skjel...@utc.edu [or skjel...@gmail.com] cell: 205-807-4968 ________________________________ From: mpi-forum <mpi-forum-boun...@lists.mpi-forum.org> on behalf of Jim Dinan via mpi-forum <mpi-forum@lists.mpi-forum.org> Sent: Saturday, October 10, 2020 1:31 PM To: Main MPI Forum mailing list <mpi-forum@lists.mpi-forum.org> Cc: Jim Dinan <james.di...@gmail.com> Subject: [EXT]: [Mpi-forum] Progress Question External Email Hi All, A colleague recently asked a question that I wasn't able to answer definitively. Is the following code guaranteed to make progress? MPI_Barrier(); -- everything is uncertain to within one message, if layered on pt2pt; --- let's assume a power of 2, and recursive doubling (RD). --- At each stage, it posts an irecv and isend to its corresponding element in RD --- All stages must complete to get to the last stage. --- At the last stage, it appears like your example below for N/2 independent process pairs, which appears always to complete. Oif rank == 1 create_file("test") if rank == 0 while not_exists("test") sleep(1); That is, can rank 1 require rank 0 to make MPI calls after its return from the barrier, in order for rank 1 to complete the barrier? If the code were written as follows: isend(..., other_rank, &req[0]) irecv(..., other_rank, &req[1]) waitall(2, req) --- Assume both isends buffer on the send-side and return immediately--valid. --- Both irecvs are posted, but unmatched as yet. Nothing has transferred on network. --- Waitall would mark the isends done at once, and work to complete the irecvs; in that process, each would have to progress the isends across the network. On this comm and all comms, incidentally. --- When waitall returns, the data has transferred to the receiver, otherwise the irecvs aren't done. if rank == 1 create_file("test") if rank == 0 while not_exists("test") sleep(1); I think it would clearly not guarantee progress since the send data can be buffered. Is the same true for barrier? Cheers, ~Jim. This message is not from a UTC.EDU address. Caution should be used in clicking links and downloading attachments from unknown senders or unexpected email.
_______________________________________________ mpi-forum mailing list mpi-forum@lists.mpi-forum.org https://lists.mpi-forum.org/mailman/listinfo/mpi-forum