| |
function index
MPI_File_write_ordered_end
Complete a split collective write using shared file pointer
int MPI_File_write_ordered_end(
MPI_File mpi_fh,
void *buf,
MPI_Status *status
);
Parameters
- mpi_fh
- [in] file handle (handle)
- buf
- [out] initial address of buffer (choice)
- status
- [out] status object (Status)
Remarks
MPI provides a restricted form of ``nonblocking collective'' I/O
operations for all data accesses using split collective data access
routines. These routines are referred to as ``split'' collective
routines because a single collective operation is split in two: a begin
routine and an end routine. The begin routine begins the operation, much
like a nonblocking data access (e.g., MPI_FILE_IREAD). The end routine
completes the operation, much like the matching test or wait (e.g.,
MPI_WAIT). As with nonblocking data access operations, the user must not
use the buffer passed to a begin routine while the routine is
outstanding; the operation must be completed with an end routine before
it is safe to free buffers, etc.
Split collective data access operations on a file handle fh are
subject to the semantic rules given below.
- On any MPI process, each file handle may have at most one active
split collective operation at any time.
- Begin calls are collective over the group of processes that
participated in the collective open and follow the ordering rules
for collective calls.
- End calls are collective over the group of processes that
participated in the collective open and follow the ordering rules
for collective calls. Each end call matches the preceding begin call
for the same collective operation. When an ``end'' call is made,
exactly one unmatched ``begin'' call for the same operation must
precede it.
- An implementation is free to implement any split collective data
access routine using the corresponding blocking collective routine
when either the begin call (e.g., MPI_FILE_READ_ALL_BEGIN) or the
end call (e.g., MPI_FILE_READ_ALL_END) is issued. The begin and end
calls are provided to allow the user and MPI implementation to
optimize the collective operation.
- Split collective operations do not match the corresponding
regular collective operation. For example, in a single collective
read operation, an MPI_FILE_READ_ALL on one process does not match
an MPI_FILE_READ_ALL_BEGIN/ MPI_FILE_READ_ALL_END pair on another
process.
- Split collective routines must specify a buffer in both the
begin and end routines.
- No collective I/O operations are permitted on a file handle
concurrently with a split collective access on that file handle
(i.e., between the begin and end of the access). That is
MPI_File_read_all_begin(fh, ...);
...
MPI_File_read_all(fh, ...);
...
MPI_File_read_all_end(fh, ...);
is erroneous.
- In a multithreaded implementation, any split collective begin
and end operation called by a process must be called from the same
thread. This restriction is made to simplify the implementation in
the multithreaded case. (Note that we have already disallowed having
two threads begin a split collective operation on the same file
handle since only one split collective operation can be active on a
file handle at any time.)
The arguments for these routines have the same meaning as for the
equivalent collective versions (e.g., the argument definitions for
MPI_FILE_READ_ALL_BEGIN and MPI_FILE_READ_ALL_END are equivalent to the
arguments for MPI_FILE_READ_ALL). The begin routine (e.g.,
MPI_FILE_READ_ALL_BEGIN) begins a split collective operation that, when
completed with the matching end routine (i.e., MPI_FILE_READ_ALL_END)
produces the result as defined for the equivalent collective routine
(i.e., MPI_FILE_READ_ALL).
For the purpose of consistency semantics, a matched pair of split
collective data access operations (e.g., MPI_FILE_READ_ALL_BEGIN and
MPI_FILE_READ_ALL_END) compose a single data access.
Example Code
The following sample code illustrates MPI_File_write_ordered_end.
Insert code here.
|
|