Questions prompted by Chicago

David C. DiNucci (dinucci@nas.nasa.gov)
Wed, 24 Jul 1996 15:10:26 -0700

A quizzle of questions about 1-sided.

(1) A straw vote was taken at the last mtg in Chicago to support 3rd-party
communication. Specifically, I believe that this was defined in terms of
the following example, which should work without C taking any action:


Process A Process C Process B

Put X in C ---------------> X
Send B ............................................> Receive A
X ---------------------> Get X in C

However, did that vote also imply that C should be able to directly load
the data being passed through it without issuing any special commands?
Specifically, is it necessary that B and C get the same value for X in
these examples?

Process A Process C Process B

Put X in C ---------------> X
Send B ............................................> Receive A
X ---------------------> Get X in C
Receive B <............... Send C
load X
..or..

Process A Process C Process B

Put X in C ---------------> X
Send C ...................> Receive A
load X
Send B ..................> Receive A
X ----------------------> Get X in C

(2) Regarding semantics which mandate an agent on some architectures: in
looking through MPI-1, I find the following progress semantics in 3.7.4
"Semantics of Nonblocking Communications":

A call to MPI_WAIT that completes a receive will eventually terminate
and return if a matching send has been started, unless the send is
satisfied by another receive. In particular, if the matching send
is nonblocking, then the receive should complete even if no call is
executed by the sender to complete the send. Similarly, a call to
MPI_WAIT that completes a send will eventually return if a matching
receive has been started, unless the receive is satisfied by another
send, and even if no call is executed to complete the receive.

To me, this sounds very close to the situation that we are considering
for 1-sided. Specifically, it sounds as though an agent is required
in point-to-point if, for example, a non-blocking send is initiated
with a message which cannot be sent in its entirety (due to size), and
the sender then enters an infinite compute loop. The receiver is
guaranteed to get the message, so on some architectures, an agent
is mandated. Can someone dispute this?

(3) I suggest that people consider the case of exchanging data between two
(or more) processes when proposing new constructs -- e.g. insert proper
synchronization into the following processes:

Process A Process B

Put to B Put to A
local load local load

Or maybe someone can argue that this isn't an important case?

Thanks. More later,
-Dave
===============================================================================
David C. DiNucci | MRJ, Inc., Rsrch Scntst |USMail: NASA Ames Rsrch Ctr
dinucci@nas.nasa.gov| NAS (Num. Aerospace Sim.)| M/S T27A-2
(415)604-4430 | Parallel Tools Group | Moffett Field, CA 94035