[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
MPI-2.1 corrections, Batch 2
Dear group,
Here is a list of issues for the next batch. These are (a little)
stickier than the first batch, and you will want to read the email discussions
that have prompted the proposed changes. What is proposed here is the
apparent concensus that arose from the email discussions. The web version of
this ballot is at http://www.mcs.anl.gov/~gropp/mpi/mpi-errata/ballot2.html.
It has links by each item to the email that has been exchanged on the mpi
forum mailing lists on the item. You will want to familiarize yourself with
the issues by reading these; the ballot below does not provide enough
background.
The general page for all related stuff is the parent of the ballot page:
http://www.mcs.anl.gov/~gropp/mpi/mpi-errata/
Please consider these and feel free to discuss them further on this list;
we will vote when it seems to be time to do so.
Regards,
Rusty Lusk
1: Page 36, after line 3
3.2.11 MPI_GET_COUNT with zero-length datatypes
The value returned as the count argument of
MPI_GET_COUNT for a datatype of length zero where zero bytes
have been transferred is zero. If the number of bytes transfered is
greater than zero, MPI_UNDEFINED is returned.
Rationale:
Zero-length datatypes may be created in a number of cases. In MPI-2,
an important case is MPI_TYPE_CREATE_DARRAY, where the
definition of the particular darry results in an empty block on some
MPI process. Programs written in an SPMD style will not check for
this special case and may want to use MPI_GET_COUNT to check
the status.
End of Rationale:
2: Add to page 36, after 3.2.11 (above)
3.2.12 MPI_GROUP_TRANSLATE_RANKS and MPI_PROC_NULL
MPI_PROC_NULL is a valid rank for input to
MPI_GROUP_TRANSLATE_RANKS, which returns
MPI_PROC_NULL as the translated rank.
3: Page 61, after line 36. Add the following (paralleling the errata to
MPI-1.1):
MPI_{COMM,WIN,FILE}_GET_ERRHANDLER behave as if a
new error handler object is created.
This provides behavior similar to that of MPI_COMM_GROUP.
4: On Page 78, after line 27, add:
MPI_BYTE should be used to send and receive data that is packed
using MPI_PACK_EXTERNAL.
Rationale:
MPI_PACK_EXTERNAL specifies that there is no header on the message
and further
specifies the exact format of the data. Since MPI_PACK may (and is
allowed
to) use a header, the datatype MPI_PACKED cannot be used for data
packed with
MPI_PACK_EXTERNAL.
End of Rationale:
5: On page 93 after line 48, add
Many of the descriptions of the collective routines provide illustrations in
terms of blocking MPI point-to-point routines. These are intended solely to
indicate what data is sent or receive by what process. Many of these examples
are not correct MPI programs; for purposes of simplicity, they often
assume infinite buffering.
6: Page 114, after line 4, add
MPI_PROC_NULL is a valid target rank in the MPI RMA calls
MPI_ACCUMULATE, MPI_GET, and MPI_PUT. The
effect is the same as for MPI_PROC_NULL in MPI point-to-point
communication.
7: Page 120, after line 13:
MPI_REPLACE, like the other predefined operations, is defined
only for the predefined MPI datatypes.
Rationale:
The rationale for this is that, for consistency, MPI_REPLACE
should have the same limitations as the other operations. Extending
it to all datatypes doesn't provide any real benefit.
End of Rationale:
8: Page 162, line 48 reads
Both groups should provide the same count.
but should read
Both groups should
provide count and datatype arguments that specify the same type
signature.
9: Page 165, lines 25--38 read
int MPI_Alltoallw(void *sendbuf, int sendcounts[], int sdispls[], MPI_Datatype sendtypes[], void *recvbuf, int recvcounts[], int rdispls[], MPI_Datatype recvtypes[], MPI_Comm comm)
MPI_ALLTOALLW(SENDBUF, SENDCOUNTS, SDISPLS, SENDTYPES, RECVBUF, RECVCOUNTS, RDISPLS, RECVTYPES, COMM, IERROR)
<type> SENDBUF(*), RECVBUF(*)
INTEGER SENDCOUNTS(*), SDISPLS(*), SENDTYPES(*), RECVCOUNTS(*), RDISPLS(*), RECVTYPES(*), COMM, IERROR
void MPI::Comm::Alltoallw(const void* sendbuf, const int sendcounts[], const int sdispls[], const MPI::Datatype sendtypes[], void* recvbuf, const int recvcounts[], const int rdispls[], const MPI::Datatype recvtypes[]) const = 0
but should read
int MPI_Alltoallw(void *sendbuf, int sendcounts[], MPI_Aint sdispls[], MPI_Datatype sendtypes[], void *recvbuf, int recvcounts[], MPI_Aint rdispls[], MPI_Datatype recvtypes[], MPI_Comm comm)
MPI_ALLTOALLW(SENDBUF, SENDCOUNTS, SDISPLS, SENDTYPES, RECVBUF, RECVCOUNTS, RDISPLS, RECVTYPES, COMM, IERROR)
<type> SENDBUF(*), RECVBUF(*)
INTEGER SENDCOUNTS(*), SENDTYPES(*), RECVCOUNTS(*), RECVTYPES(*), COMM, IERROR
INTEGER (KIND=MPI_ADDRESS_KIND) SDISPLS(*), RDISPLS(*)
void MPI::Comm::Alltoallw(const void* sendbuf, const int sendcounts[], const MPI::Aint sdispls[], const MPI::Datatype sendtypes[], void* recvbuf, const int recvcounts[], const MPI::Aint rdispls[], const MPI::Datatype recvtypes[]) const = 0
10: Page 199, after line 11, add:<BR>
Advice to implementors:
High quality implementation should raise an error when an keyval
that was created by a call to MPI_XXX_CREATE_KEYVAL is
used with an object of the wrong type with a call to
MPI_YYY_GET_ATTR, MPI_YYY_SET_ATTR, MPI_YYY_DELETE_ATTR, or
MPI_YYY_FREE_KEYVAL. To do so, it is necessary to maintain, with
each keyval, information on the typedef of the associated user
function.
End of advice to implementors:
11: Page 221, after line 40, add
MPI_DISPLACEMENT_CURRENT is invalid unless the amode for the
file has MPI_MODE_SEQUENTIAL set.
12: Page 253, line 4 reads
typedef MPI::Datarep_extent_function(const MPI::Datatype& datatype,
but should read
typedef void MPI::Datarep_extent_function(const MPI::Datatype& datatype,
13: Page 334, line 22 read
void MPI::Win::Get(const void *origin_addr, int origin_count, const
but should read
void MPI::Win::Get(void *origin_addr, int origin_count, const
14: Page 341, line 18 reads
typedef MPI::Datarep_conversion_function(void* userbuf,
but should read
typedef void MPI::Datarep_conversion_function(void* userbuf,
15: Page 341, line 22 reads
typedef MPI::Datarep_extent_function(const MPI::Datatype& Datatype,
but should read
typedef void MPI::Datarep_extent_function(const MPI::Datatype& Datatype,
16: Page 343, line 44
Remove the const from const MPI::Datatype.
17: Page 344, lines 13, 23, 32, 38, and 47
Remove the const from const MPI::Datatype.
18: Page 345, lines 5 and 11
Remove the const from const MPI::Datatype.