The following corrections to  MPI-1.1 are (all page and line numbers  
are for the June 12, 1995 version without changebars):  
 
 
- Page 11, line 36 reads 
 MPI_ADDRESS
 but should read
 MPI_ADDRESS_TYPE
  
  
 
 
- Page 19, lines 1--2 reads 
 for (64 bit) C integers declared to be of type  longlong int
 but should read
 for C integers declared to be of type  long long
  
  
 
 
- Page 40, line 48 should have the following text added: 
  
  
 
 Advice to users.
  
To prevent problems with the argument copying and register optimization done  
  by Fortran compilers, please note the hints in subsections ``Problems Due to  
  Data Copying and Sequence Association,'' and ``A Problem with  
  Register Optimization'' in Section A Problem with Register Optimization 
 of the  MPI-2 Standard,  
  .  
 ( End of advice to users.) 
 
  
  
  
  
 
 
- Page 41, lines 16--18 reads 
 A  empty status is a status which is set to return  tag =  
MPI_ANY_TAG,  source = MPI_ANY_SOURCE, and is also  
internally configured so that calls to  MPI_GET_COUNT and  
 MPI_GET_ELEMENTS return  count = 0.
 but should read
 A  empty status is a status which is set to return  tag =  
MPI_ANY_TAG,  source = MPI_ANY_SOURCE,  error =  
MPI_SUCCESS,  and is also internally configured so that calls to  
 MPI_GET_COUNT and  MPI_GET_ELEMENTS return  
 count = 0  
and  MPI_TEST_CANCELLED returns  false.
  
  
  
 
 
- Page 52, lines 46--48 read 
 
 100            CALL MPI_RECV(i, 1, MPI_INTEGER, 0, 0, status, ierr) 
          ELSE 
200            CALL MPI_RECV(x, 1, MPI_REAL, 1, 0, status, ierr) 
but should read
 
 100            CALL MPI_RECV(i, 1, MPI_INTEGER, 0, 0, comm, status, ierr) 
          ELSE 
200            CALL MPI_RECV(x, 1, MPI_REAL, 1, 0, comm, status, ierr) 
- Page 53, lines 18--23 read 
 
 100                CALL MPI_RECV(i, 1, MPI_INTEGER, MPI_ANY_SOURCE, 
                                 0, status, ierr) 
              ELSE 
200                CALL MPI_RECV(x, 1, MPI_REAL, MPI_ANY_SOURCE, 
                                 0, status, ierr) 
but should read
 
 100                CALL MPI_RECV(i, 1, MPI_INTEGER, MPI_ANY_SOURCE, 
                                 0, comm, status, ierr) 
              ELSE 
200                CALL MPI_RECV(x, 1, MPI_REAL, MPI_ANY_SOURCE, 
                                 0, comm, status, ierr) 
 
 
 
- Page 59, line 3 should have the following text added: 
  
  
 
 Advice to users.
  
To prevent problems with the argument copying and register optimization done  
  by Fortran compilers, please note the hints in subsections ``Problems Due to  
  Data Copying and Sequence Association,'' and ``A Problem with  
  Register Optimization'' in Section A Problem with Register Optimization 
 of the  MPI-2 Standard,  
  .  
 ( End of advice to users.) 
 
  
  
  
 
 
- Page 59, lines 42--45 read 
 int   
MPI_Sendrecv(void *sendbuf, int sendcount, MPI_Datatype sendtype,
 int dest, int sendtag, void *recvbuf, int recvcount,
 MPI_Datatype recvtype, int source, MPI_Datatype recvtag,
 MPI_Comm comm, MPI_Status *status)
 but should read
 int   
MPI_Sendrecv(void *sendbuf, int sendcount, MPI_Datatype sendtype,
 int dest, int sendtag, void *recvbuf, int recvcount,
 MPI_Datatype recvtype, int source, int recvtag,
 MPI_Comm comm, MPI_Status *status)
  
  
  
  
 
 
- Page 60, line 3 reads 
 SOURCE, RECV  
TAG, COMM, STATUS(MPI_STATUS_SIZE), IERROR
 but should read
 SOURCE, RECVTAG, COMM, STATUS(MPI_STATUS_SIZE), IERROR
  
  
  
 
 
- Page 70, line 16 should have the following text added: 
  
  
 
 Advice to users.
  
To prevent problems with the argument copying and register optimization done  
  by Fortran compilers, please note the hints in subsections ``Problems Due to  
  Data Copying and Sequence Association,'' and ``A Problem with  
  Register Optimization'' in Section A Problem with Register Optimization 
 of the  MPI-2 Standard,  
  .  
 ( End of advice to users.) 
 
  
  
 
 
- Page 71, line 10 reads 
 and do not affect the the content of a message
 but should read
 and do not affect the content of a message
  
  
 
 
- Page 74, lines 39--45 read 
 A datatype may specify overlapping entries. The use of such a  
datatype in a receive operation is erroneous. (This is erroneous even  
if the actual message received is short enough not to write any entry  
more than once.) 
A datatype may specify overlapping entries.  If such a datatype is used  
in a receive operation, that is, if some part of the receive buffer  
is written more than once by the receive operation, then the  
call is erroneous.  
  
The first part was an  MPI-1.1 addition.  The second part overlaps  
with it.  The old text will be removed so it now reads 
 A datatype may specify overlapping entries. The use of such a  
datatype in a receive operation is erroneous. (This is erroneous even  
if the actual message received is short enough not to write any entry  
more than once.)
  
  
 
 
- Page 75, line 24 should have the following text added:
 The  datatype argument should match the argument provided by the  
receive call that set the  status variable. 
 
 
- Page 85, line 36 reads
 ``specified by  outbuf and  outcount''
 but should read
 ``specified by  outbuf and  outsize.''
  
 
 
- Page 90, line 3 reads 
 MPI_Pack_size(count, MPI_CHAR, &k2);
 but should read
 MPI_Pack_size(count, MPI_CHAR, comm, &k2);
  
  
 
 
- Page 90, line 10 reads 
 MPI_Pack(chr, count, MPI_CHAR, &lbuf, k, &position, comm);
 but should read
 MPI_Pack(chr, count, MPI_CHAR, lbuf, k, &position, comm);
  
  
  
 
 
- Page 97, line 41 reads 
  
 MPI_Recv(recvbuf+disp[i]· extent(recvtype), recvcounts[i], 
recvtype, i, ...). 
   
but should read 
 
  
 
  
  
  
  
 
 
- Page 109, lines 26--27 and page 110, lines 28--29 reads 
 The  jth block of data sent from each process is received  
by every process and placed in the  jth block of the  
buffer  recvbuf.
 but should read
 The block of data sent from the  jth process is received  
by every process and placed in the  jth block of the  
buffer  recvbuf.
  
  
  
 
 
- Page 117, lines 22--23 reads 
 MPI provides seven such predefined datatypes.
 but should read
 MPI provides nine such predefined datatypes.
 
  
  
  
  
 
 
- Page 121, line 1 reads 
 
 FUNCTION USER_FUNCTION( INVEC(*), INOUTVEC(*), LEN, TYPE) 
 but should read
 
 SUBROUTINE USER_FUNCTION(INVEC, INOUTVEC, LEN, TYPE) 
  
 
 
- Page 122, lines 35--36 read 
 MPI_OP_FREE( op)| IN op | operation (handle) |  
 but should read
 MPI_OP_FREE( op)| INOUT op | operation (handle) |  
  
  
 
 
- Page 125, line 1 reads 
 CALL MPI_ALLREDUCE(sum, c, n, MPI_REAL, MPI_SUM, 0, comm, ierr)
 but should read
 CALL MPI_ALLREDUCE(sum, c, n, MPI_REAL, MPI_SUM, comm, ierr)
  
  
  
 
 
- Page 141, lines 27--27 read 
 |  |  | IN ranges | an array of integer triplets, of the  
form (first rank, last rank, stride) indicating ranks in  
 group of processes to be included in  newgroup |  
 but should read
 |  |  | IN ranges | a one-dimensional array of integer triplets, of the  
form (first rank, last rank, stride) indicating ranks in  
 group of processes to be included in  newgroup |  
  
  
  
 
 
- Page 142, line 10 reads 
 |  |  | IN n | number of elements in array ranks (integer) |  
 but should read
 |  |  | IN n | number of triplets in array  ranges (integer) |  
  
  
  
  
 
 
- Page 194, lines 30--31 reads 
 to the greatest possible, extent,
 but should read
 to the greatest possible extent,
  
  
  
 
 
- Page 194, line 48 reads 
 MPI_ERRHANDLER_CREATE(FUNCTION, HANDLER, IERROR)
 but should read
 MPI_ERRHANDLER_CREATE(FUNCTION, ERRHANDLER, IERROR)
  
  
  
  
 
 
- Page 195, line 15 should have the following text added: 
 In the Fortran language, the user routine should be of the form: 
 
 SUBROUTINE HANDLER_FUNCTION(COMM, ERROR_CODE, .....) 
INTEGER COMM, ERROR_CODE 
 
 Advice to users. 
Users are discouraged from using a Fortran  HANDLER_FUNCTION since the  
routine expects a variable number of arguments.  Some Fortran systems  
may allow this but some may fail to give the correct result or  
compile/link this code.  Thus, it will not, in general, be possible to  
create portable code with a Fortran  HANDLER_FUNCTION.  
 ( End of advice to users.) 
 
  
 
 
- Page 196, lines 1--2 reads 
 MPI_ERRHANDLER_FREE( errhandler )| IN errhandler | MPI error handler (handle) |  
 but should read
 MPI_ERRHANDLER_FREE( errhandler )| INOUT errhandler | MPI error handler (handle) |  
  
  
  
  
 
 
- Page 197, line 25 should have added:
  
An  MPI error class is a valid  MPI error code.  Specifically, the values  
defined for  MPI error classes are valid  MPI error codes.  
  
  
  
  
 
 
- Page 201, line 28 reads 
 ...of different language bindings is is done ....
 but should read
 ...of different language bindings is done .... 
  
  
  
  
  
  
 
 
- Page 203, line 1 reads 
 MPI_PCONTROL(level)
 but should read
 MPI_PCONTROL(LEVEL)
  
  
  
 
 
- Page 210, line 44 reads 
 MPI_PENDING
 but should read
 MPI_ERR_PENDING
  
  
  
 
 
- Page 211, line 44 reads 
 MPI_DOUBLE_COMPLEX
 but should be moved to Page 212, line 22 since it is an optional  
Fortran datatype. 
  
  
 
 
- Page 212, add new lines of text at line 22 and line 25 to read: 
 etc.
 Thus, the text will now read:
 
 /* optional datatypes (Fortran) */ 
MPI_INTEGER1 
MPI_INTEGER2 
MPI_INTEGER4 
MPI_REAL2 
MPI_REAL4 
MPI_REAL8 
etc. 
 
/* optional datatypes (C) */ 
MPI_LONG_LONG_INT 
etc. 
  
 
 
- Page 213, line 28.  The following text should be added:
 
 /* Predefined functions in C and Fortran */ 
MPI_NULL_COPY_FN 
MPI_NULL_DELETE_FN 
MPI_DUP_FN 
  
  
 
 
- Page 213, line 41. Add the line  
 MPI_Errhandler 
  
  
 
 
- Page 214, line 9 reads 
 
 FUNCTION USER_FUNCTION( INVEC(*), INOUTVEC(*), LEN, TYPE) 
 but should read
 
 SUBROUTINE USER_FUNCTION( INVEC, INOUTVEC, LEN, TYPE) 
  
 
 
- Page 214, lines 14 and 15 read 
 
  PROCEDURE COPY_FUNCTION(OLDCOMM, KEYVAL, EXTRA_STATE, 
               ATTRIBUTE_VAL_IN, ATTRIBUTE_VAL_OUT, FLAG, IERR) 
but should read
 
  SUBROUTINE COPY_FUNCTION(OLDCOMM, KEYVAL, EXTRA_STATE, 
               ATTRIBUTE_VAL_IN, ATTRIBUTE_VAL_OUT, FLAG, IERR) 
 
 
 
- Page 214, line 21 reads 
 
 PROCEDURE DELETE_FUNCTION(COMM, KEYVAL, ATTRIBUTE_VAL, EXTRA_STATE, IERR) 
 but should read
 
 SUBROUTINE DELETE_FUNCTION(COMM, KEYVAL, ATTRIBUTE_VAL, EXTRA_STATE, IERR) 
  
  
 
 
- Page 214, line 23 should have the following text added: 
 The handler-function for error handlers should be declared like this: 
 
 SUBROUTINE HANDLER_FUNCTION(COMM, ERROR_CODE, .....) 
INTEGER COMM, ERROR_CODE 
  
  
 
 
- Page 216, lines 4--7 read 
 int   
MPI_Sendrecv(void *sendbuf, int sendcount, MPI_Datatype sendtype,
 int dest, int sendtag, void *recvbuf, int recvcount,
 MPI_Datatype recvtype, int source, MPI_Datatype recvtag,
 MPI_Comm comm, MPI_Status *status)
 but should read
 int   
MPI_Sendrecv(void *sendbuf, int sendcount, MPI_Datatype sendtype,
 int dest, int sendtag, void *recvbuf, int recvcount,
 MPI_Datatype recvtype, int source, int recvtag,
 MPI_Comm comm, MPI_Status *status)
  
  
  
  
 
 
- Page 220, lines 19--20 reads 
 int double MPI_Wtime(void)
 int double MPI_Wtick(void)
 but should read
 double MPI_Wtime(void)
 double MPI_Wtick(void)
  
  
  
  
  
  
  
 
 
- Page 222, line 34 reads 
 INTEGER REQUEST, COUNT, DATATYPE, DEST, TAG, COMM, REQUEST, IERROR
 but should read
 INTEGER COUNT, DATATYPE, DEST, TAG, COMM, REQUEST, IERROR
  
  
  
 
 
- Page 222, line 38 reads 
 INTEGER REQUEST, COUNT, DATATYPE, DEST, TAG, COMM, REQUEST, IERROR
 but should read
 INTEGER COUNT, DATATYPE, DEST, TAG, COMM, REQUEST, IERROR
  
  
  
 
 
- Page 227, lines 19--20  reads 
 MPI_INTERCOMM_MERGE(INTERCOMM, HIGH, INTRACOMM, IERROR)
 INTEGER INTERCOMM, INTRACOMM, IERROR
 but should read
 MPI_INTERCOMM_MERGE(INTERCOMM, HIGH, NEWINTRACOMM, IERROR)
 INTEGER INTERCOMM, NEWINTRACOMM, IERROR
  
  
  
 
 
- Page 228, line 46 reads 
 MPI_ERRHANDLER_CREATE(FUNCTION, HANDLER, IERROR)
 but should read
 MPI_ERRHANDLER_CREATE(FUNCTION, ERRHANDLER, IERROR)
  
  
  
 
 
- Page 229, line 33  reads 
 MPI_PCONTROL(level)
 but should read
 MPI_PCONTROL(LEVEL)