Re: Strart, post, wait, complete

Lyndon J. Clarke (lyndon@epcc.ed.ac.uk)
Thu, 20 Mar 1997 16:54:33 +0000 (GMT)

Following on from previous posts on Start-Post/Complete-Wait. Here a
proposal that reduces the number of MPI functions by two :-) but
resolves confusions about what synchronises with what.

---------- Begin Proposal

The calls MPI_WIN_POST, MPI_WIN_START, MPI_WIN_COMPLETE, MPI_WIN_WAIT to
be replaced by the following two calls.

MPI_WIN_START(origins, targets, assert, win)
IN origins group of origin proceses (handle)
IN targets group of target proceses (handle)
IN assert program assertions (integer)
IN win window object (handle)

Starts a sequence of RMA operations targeted to the windows associated
with win at the target processes in the group of targets, and a remote
sequence of RMA operations targeted at the window associated with win.

Either or both of origins and targets may be the empty group
MPI_GROUP_EMPTY (sp?). If targets is the empty group then the process
will not issue RMA calls to any of the windows associated in the group
of processes associated with win. If origins is the empty group then
none of the processes in the group associated with win will issue RMA
calls targetted at the window associated with win.

The call to MPI_WIN_START may block until matching calls of
MPI_WIN_START occur at the target processes in group targets. RMA
accesses to each of the target windows may be delayed until the target
processes execute a matching call to MPI_WIN_START.

The assert argument is used to provide assertions on the context of
the call that may be used for various optimisations. This is described
below. A value of assert = 0 is always valid.

MPI_WIN_COMPLETE(win)
IN win window object (handle)

Each call to MPI_WIN_START(origins, targets, assert, win) is followed
by a call to MPI_WIN_COMPLETE(win). When the call returns all RMA
accesses targeted to the windows associated with win at the target
processes in the group targets, and remote RMA calls targeted with the
window associated with win, have completed.

The call to MPI_WIN_COMPLETE will block until matching calls of
MPI_WIN_COMPLETE occur at the origin processes in group origins.

The assert argument is used to provide assertions on the context of
the call that may be used for various optimisations. This is described
below. A value of assert = 0 is always valid.

Asserts:

MPI_WIN_START:

MPI_NOCHECK - The matching calls to MPI_WIN_START have already
completed on the target processes when the call to MPI_WIN_START is
made. The MPI_NOCHECK assert should also be given by the target
processes.

MPI_NOSTORE - The local window was not updated by local stores since
last synchronisation. This may avoid the need for cache
synchronisation at the MPI_WIN_START call.

MPI_NOPUT - The local window will not be updated by put or
accumulate calls after the MPI_WIN_START call, until the ensuing
(MPI_WIN_COMPLETE) synchronisation. This may avoid the need for
cache synchronisation at the MPI_WIN_COMPLETE call.

---------- End Proposal

/-----------------------------------------------------------------------\
|e||)| Lyndon J Clarke Edinburgh Parallel Computing Centre | Cymru |
|c||c| Tel: [+ 44] (0)131 650 5021 Email: lyndon@epcc.ed.ac.uk | am Byth|
\----| URL: http://www.epcc.ed.ac.uk/~lyndon/ |-------------------------/
\----------------------------------------/