9.4.5 Split Collective Data Access Routines

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.

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 (Section 9.6.1, page [*]), 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.



MPI_FILE_READ_AT_ALL_BEGIN(fh, offset, buf, count, datatype)

IN
fh file handle (handle)
IN
offset file offset (integer)
OUT
buf initial address of buffer (choice)
IN
count number of elements in buffer (integer)
IN
datatype datatype of each buffer element (handle)

int MPI_File_read_at_all_begin(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype)



MPI_FILE_READ_AT_ALL_BEGIN(FH, OFFSET, BUF, COUNT, DATATYPE, IERROR)<type> BUF(*)
INTEGER FH, COUNT, DATATYPE, IERROR
INTEGER(KIND=MPI_OFFSET_KIND) OFFSET



int MPI::File::Read_at_all_begin(MPI::Offset offset, void* buf, int count, const MPI::Datatype& datatype)



void



MPI_FILE_READ_AT_ALL_END(fh, buf, status)

IN
fh file handle (handle)
OUT
buf initial address of buffer (choice)
OUT
status status object (Status)

int MPI_File_read_at_all_end(MPI_File fh, void *buf, MPI_Status *status)



MPI_FILE_READ_AT_ALL_END(FH, BUF, STATUS, IERROR)<type> BUF(*)
INTEGER FH, STATUS(MPI_STATUS_SIZE), IERROR



int MPI::File::Read_at_all_end(void* buf, MPI::Status& status)



void int MPI::File::Read_at_all_end(void* buf)



void



MPI_FILE_WRITE_AT_ALL_BEGIN(fh, offset, buf, count, datatype)

INOUT
fh file handle (handle)
IN
offset file offset (integer)
IN
buf initial address of buffer (choice)
IN
count number of elements in buffer (integer)
IN
datatype datatype of each buffer element (handle)

int MPI_File_write_at_all_begin(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype)



MPI_FILE_WRITE_AT_ALL_BEGIN(FH, OFFSET, BUF, COUNT, DATATYPE, IERROR)<type> BUF(*)
INTEGER FH, COUNT, DATATYPE, IERROR
INTEGER(KIND=MPI_OFFSET_KIND) OFFSET



int MPI::File::Write_at_all_begin(MPI::Offset offset, const void* buf, int count, const MPI::Datatype& datatype)



void



MPI_FILE_WRITE_AT_ALL_END(fh, buf, status)

INOUT
fh file handle (handle)
IN
buf initial address of buffer (choice)
OUT
status status object (Status)

int MPI_File_write_at_all_end(MPI_File fh, void *buf, MPI_Status *status)



MPI_FILE_WRITE_AT_ALL_END(FH, BUF, STATUS, IERROR)<type> BUF(*)
INTEGER FH, STATUS(MPI_STATUS_SIZE), IERROR



int MPI::File::Write_at_all_end(const void* buf, MPI::Status& status)



void int MPI::File::Write_at_all_end(const void* buf)



void



MPI_FILE_READ_ALL_BEGIN(fh, buf, count, datatype)

INOUT
fh file handle (handle)
OUT
buf initial address of buffer (choice)
IN
count number of elements in buffer (integer)
IN
datatype datatype of each buffer element (handle)

int MPI_File_read_all_begin(MPI_File fh, void *buf, int count, MPI_Datatype datatype)



MPI_FILE_READ_ALL_BEGIN(FH, BUF, COUNT, DATATYPE, IERROR)<type> BUF(*)
INTEGER FH, COUNT, DATATYPE, IERROR



int MPI::File::Read_all_begin(void* buf, int count, const MPI::Datatype& datatype)



void



MPI_FILE_READ_ALL_END(fh, buf, status)

INOUT
fh file handle (handle)
OUT
buf initial address of buffer (choice)
OUT
status status object (Status)

int MPI_File_read_all_end(MPI_File fh, void *buf, MPI_Status *status)



MPI_FILE_READ_ALL_END(FH, BUF, STATUS, IERROR)<type> BUF(*)
INTEGER FH, STATUS(MPI_STATUS_SIZE), IERROR



int MPI::File::Read_all_end(void* buf, MPI::Status& status)



void int MPI::File::Read_all_end(void* buf)



void



MPI_FILE_WRITE_ALL_BEGIN(fh, buf, count, datatype)

INOUT
fh file handle (handle)
IN
buf initial address of buffer (choice)
IN
count number of elements in buffer (integer)
IN
datatype datatype of each buffer element (handle)

int MPI_File_write_all_begin(MPI_File fh, void *buf, int count, MPI_Datatype datatype)



MPI_FILE_WRITE_ALL_BEGIN(FH, BUF, COUNT, DATATYPE, IERROR)<type> BUF(*)
INTEGER FH, COUNT, DATATYPE, IERROR



int MPI::File::Write_all_begin(const void* buf, int count, const MPI::Datatype& datatype)



void



MPI_FILE_WRITE_ALL_END(fh, buf, status)

INOUT
fh file handle (handle)
IN
buf initial address of buffer (choice)
OUT
status status object (Status)

int MPI_File_write_all_end(MPI_File fh, void *buf, MPI_Status *status)



MPI_FILE_WRITE_ALL_END(FH, BUF, STATUS, IERROR)<type> BUF(*)
INTEGER FH, STATUS(MPI_STATUS_SIZE), IERROR



int MPI::File::Write_all_end(const void* buf, MPI::Status& status)



void int MPI::File::Write_all_end(const void* buf)



void



MPI_FILE_READ_ORDERED_BEGIN(fh, buf, count, datatype)

INOUT
fh file handle (handle)
OUT
buf initial address of buffer (choice)
IN
count number of elements in buffer (integer)
IN
datatype datatype of each buffer element (handle)

int MPI_File_read_ordered_begin(MPI_File fh, void *buf, int count, MPI_Datatype datatype)



MPI_FILE_READ_ORDERED_BEGIN(FH, BUF, COUNT, DATATYPE, IERROR)<type> BUF(*)
INTEGER FH, COUNT, DATATYPE, IERROR



int MPI::File::Read_ordered_begin(void* buf, int count, const MPI::Datatype& datatype)



void



MPI_FILE_READ_ORDERED_END(fh, buf, status)

INOUT
fh file handle (handle)
OUT
buf initial address of buffer (choice)
OUT
status status object (Status)

int MPI_File_read_ordered_end(MPI_File fh, void *buf, MPI_Status *status)



MPI_FILE_READ_ORDERED_END(FH, BUF, STATUS, IERROR)<type> BUF(*)
INTEGER FH, STATUS(MPI_STATUS_SIZE), IERROR



int MPI::File::Read_ordered_end(void* buf, MPI::Status& status)



void int MPI::File::Read_ordered_end(void* buf)



void



MPI_FILE_WRITE_ORDERED_BEGIN(fh, buf, count, datatype)

INOUT
fh file handle (handle)
IN
buf initial address of buffer (choice)
IN
count number of elements in buffer (integer)
IN
datatype datatype of each buffer element (handle)

int MPI_File_write_ordered_begin(MPI_File fh, void *buf, int count, MPI_Datatype datatype)



MPI_FILE_WRITE_ORDERED_BEGIN(FH, BUF, COUNT, DATATYPE, IERROR)<type> BUF(*)
INTEGER FH, COUNT, DATATYPE, IERROR



int MPI::File::Write_ordered_begin(const void* buf, int count, const MPI::Datatype& datatype)



void



MPI_FILE_WRITE_ORDERED_END(fh, buf, status)

INOUT
fh file handle (handle)
IN
buf initial address of buffer (choice)
OUT
status status object (Status)

int MPI_File_write_ordered_end(MPI_File fh, void *buf, MPI_Status *status)



MPI_FILE_WRITE_ORDERED_END(FH, BUF, STATUS, IERROR)<type> BUF(*)
INTEGER FH, STATUS(MPI_STATUS_SIZE), IERROR



int MPI::File::Write_ordered_end(const void* buf, MPI::Status& status)



void int MPI::File::Write_ordered_end(const void* buf)



void

MPI-Standard for MARMOT