From: George Caragea (george_at_east_dot_isi_dot_edu)
Date: Thu Aug 14 2008 - 09:06:04 PDT
Hi all, When using the GASNet mpi-conduit built upon the AMMPI library, I think that there is a deadlock possible when using blocking sends (AMMPI_NONBLOCKING_SENDS=0). Consider the following GASNet client pseudocode code (based on testcore1.c): SENDER iter=0; while (iter++<n) gasnet_AMRequestShort(RECEIVER); reply_handler() {} ------------------------------------------ RECEIVER while (iter<n) gasnet_AMPoll(); request_handler(sender) iter++; gasnet_AMReplyShort(sender); If blocking MPI sends are used, then we can have the following scenario: SENDER RECEIVER t=0: send M1 t=0: AMPoll() - no message t=1: AMPoll() - no message t=1: AMPoll() - no message t=2: BSend(M1) t=2: AMPoll() - no message t=3: send M2 t=3: AMPoll() - message M1 t=4: AMPoll() - no message t=4: process M1 t=5: BSend(M2) t=5: BSend(R1) In this case, we get a deadlock since both processes are waiting in a blocking send. Is this a problem with AMMPI/mpi-conduit or am I missing something? If it is indeed a problem, is the only solution using blocking sends? Thank you, George