I'm afraid that there is really a logical error in your design,
because your POST/START synchronization depends on a state
("posted"/"not posted") instead of a matching rule as in
COMPLETE/WAIT.
Your description of MPI_RMA_START says:
"The succededing RMA access to this window will be delayed,
if necessary, until the target window is posted by a call
to MPI_RMA_POST."
please can you say, on which page/line I find some sentence,
when a local window switches from the state "posted" to the
state "not posted".
page 15, line 16 you say:
"...window is posted by a call to MPI_RMA_POST."
In the moment, it seems formally that the window is then posted
for the whole time until MPI_FINALIZE,
i.e. MPI_START must return after the first MPI_RMA_POST
always immediately.
Therefore I think in your model you should add sentence like this
in the description of MPI_RMA_POST:
MPI_RMA_POST switches the local window to the state "posted"
and MPI_RMA_WAIT switches it to the state "not posted".
An now a trivial example that can fail with your model,
but that must not fail by a model that we can vote for:
process A proc. B
state of window, action action
| "not posted" load
| POST
| "posted" -------->
| "posted" START
| "posted" PUT
| "posted" <========
| "posted" (data stored)
| "posted" COMPLETE
| "posted" <--------
| WAIT
| "not posted" load
| POST
| "posted" -------->
| "posted" START
| "posted" PUT
| "posted" <========
| "posted" (data stored)
| "posted" COMPLETE
| "posted" <--------
| WAIT
| "not posted" load
| time
V
And now the same application with different timing:
| "not posted" load
| POST
| "posted" -------->
| "posted" START
| "posted" PUT
| "posted" COMPLETE
| "posted" START !!!!!!
| "posted" <========
| "posted" (data stored)
| "posted" <--------
| WAIT
| "not posted" load
| POST
| "posted" -------->
| "posted" PUT
| "posted" COMPLETE
| "posted" <========
| "posted" (data stored)
| "posted" <--------
| WAIT
| "not posted" load
| time
V
Why should the START marked by "!!!!!!" block?
The window is "posted" and therefore the marked START must not block!
If we want to fix this problem we perhaps can add additional rules.
Alternatives:
A) "The window switches to "not posted" when an RMA is executed
at the window."
This makes no sense due to the possibility of delayed execution
at the target, see the timing above.
B) "The window switches to "not posted" when an RMA is issued
to the window."
This helps, but cannot be implemented, because a third process C
cannot know whether B has already issued an RMA operation.
C) ??????
If you or someone else can solve this critical problem, it is good.
If not, then please look at the alternative proposal, because we
need to use it:
MPI_RMA_POST(comm, rank) and MPI_RMA_START(comm,count)
and a matching rule like that for COMPLETE/WAIT.
Your argument against this (page 17, lines 18-20) is not very good,
because with COMPLETE/WAIT we can live with this problem, and for
the case of all processes we can use rank=MPI_ANY_SOURCE.
Rolf
PS: This is the same problem as in my last mail, but the problem
is still unsolved and now I have found an better example.
Rolf Rabenseifner (Computer Center )
Rechenzentrum Universitaet Stuttgart (University of Stuttgart)
Allmandring 30 Phone: ++49 711 6855530
D-70550 Stuttgart 80 FAX: ++49 711 6787626
Germany rabenseifner@rus.uni-stuttgart.de