| MPI_ALLGATHER( sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, comm) | |
| IN sendbuf | starting address of send buffer (choice) | 
| IN sendcount | number of elements in send buffer (non-negative integer) | 
| IN sendtype | data type of send buffer elements (handle) | 
| OUT recvbuf | address of receive buffer (choice) | 
| IN recvcount | number of elements received from any process (non-negative integer) | 
| IN recvtype | data type of receive buffer elements (handle) | 
| IN comm | communicator (handle) | 
 
  int MPI_Allgather(void* sendbuf, int sendcount, MPI_Datatype sendtype, void* recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm) 
  
 
  MPI_ALLGATHER(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE, COMM, IERROR)   
The type signature associated with  sendcount, sendtype,  
at a process must be equal to the type signature associated with  
 recvcount, recvtype at any other process.  
  
If  comm is an intracommunicator,   
the outcome of a call to  MPI_ALLGATHER(...) is as if  
all processes executed  n calls to  
 
for  root = 0 , ..., n-1.  The rules for correct usage of  
 MPI_ALLGATHER are easily found from the corresponding rules  
for  MPI_GATHER.  
  
The ``in place'' option  for intracommunicators is specified by passing the  
value   
  MPI_IN_PLACE to the argument  sendbuf at all processes.  
 sendcount and  sendtype are ignored.  Then the input data  
of each process is assumed to be in the area where that  
process would receive its own contribution to the receive  
buffer.  
  
If  comm is an intercommunicator, then each process  
of one group (group A) contributes  sendcount data items; these  
data are concatenated and the result  
is stored at each process in the other  
group (group B).  Conversely the concatenation of the  
contributions of the processes in group B is stored at each process in  
group A.   The send buffer arguments in group A must be consistent  
with the receive buffer arguments in group B, and vice versa.  
  
  
 
  
The communication pattern of  MPI_ALLGATHER executed on an  
intercommunication domain need not be symmetric.  The number of items  
sent by processes in group A (as specified by the arguments  
 sendcount, sendtype in group A and the arguments  
 recvcount, recvtype in group B), need not equal the number of  
items sent by processes in group B (as specified by the arguments  
 sendcount, sendtype in group B and the arguments  
 recvcount, recvtype in group A).  In particular, one can move  
data in only one direction by specifying  sendcount = 0 for  
the communication in the reverse direction.  
  
 ( End of advice to users.)   
  int MPI_Allgatherv(void* sendbuf, int sendcount, MPI_Datatype sendtype, void* recvbuf, int *recvcounts, int *displs, MPI_Datatype recvtype, MPI_Comm comm)   
  MPI_ALLGATHERV(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNTS, DISPLS, RECVTYPE, COMM, IERROR)   
The type signature associated with  sendcount, sendtype,  
at process  j must be equal to the type signature associated with  
 recvcounts[j], recvtype at any other process.  
  
If  comm is an intracommunicator,   
the outcome is as if all processes executed calls to  
  
  
 
 
 <type> SENDBUF(*), RECVBUF(*) 
INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, COMM, IERROR 
  
  
  
 { void MPI::Comm::Allgather(const void* sendbuf, int sendcount, const MPI::Datatype& sendtype, void* recvbuf, int recvcount, const MPI::Datatype& recvtype) const = 0  (binding deprecated, see Section Deprecated since  MPI-2.2 
) }
  
  
  
 MPI_ALLGATHER can be thought of as  MPI_GATHER, but  
where all processes receive the result, instead of just the root.  
The block of data sent from the   
 j-th   
process is received by every process and placed in the   
 j-th   
block of the buffer  recvbuf.  
![]()
 
 Advice to users.  
 
  
MPI_ALLGATHERV( sendbuf, sendcount, sendtype, recvbuf,  
recvcounts, displs, recvtype, comm)  IN  sendbuf  starting address of send buffer (choice)  IN  sendcount  number of elements in send buffer (non-negative  
integer)  IN  sendtype  data type of send buffer elements (handle)  OUT  recvbuf  address of receive buffer (choice)  IN  recvcounts non-negative  
integer array (of length group size)  
containing the number of elements that are received from each process  IN  displs  integer array (of length group size).  Entry  
 i specifies the displacement (relative to  recvbuf) at  
which to place the incoming data from process  i  IN  recvtype  data type of receive buffer elements (handle)  IN  comm   communicator (handle) 
  
 <type> SENDBUF(*), RECVBUF(*) 
INTEGER SENDCOUNT, SENDTYPE, RECVCOUNTS(*), DISPLS(*), RECVTYPE, COMM, IERROR 
  
  
  
 { void MPI::Comm::Allgatherv(const void* sendbuf, int sendcount,  const MPI::Datatype& sendtype, void* recvbuf,  const int recvcounts[], const int displs[],  const MPI::Datatype& recvtype) const = 0  (binding deprecated, see Section Deprecated since  MPI-2.2 
) }
  
  
  
 MPI_ALLGATHERV can be thought of as  MPI_GATHERV, but  
where all processes receive the result, instead of just the root.  
The block of data sent from the   
 j-th   
process is received by every process and placed in the   
 j-th   
block of the buffer  recvbuf.  
These blocks need not all be the same size.  
 
    MPI_GATHERV(sendbuf,sendcount,sendtype,recvbuf,recvcounts,displs, 
                                                   recvtype,root,comm), 
 
for  root = 0 , ..., n-1.  The rules for correct usage of  
 MPI_ALLGATHERV are easily found from the corresponding rules  
for  MPI_GATHERV.  
  
The ``in place'' option  for intracommunicators is specified by passing the  
value   
  MPI_IN_PLACE to the argument  sendbuf at all processes.  
In such a case,  sendcount and  sendtype are ignored, and the input dataof each process is assumed to be in the area where that  
process would receive its own contribution to the receive   
buffer.  
  
If  comm is an intercommunicator, then each process  
of one group (group A) contributes  sendcount  
data items; these data are concatenated and the result  
is stored at each process in the other  
group (group B).  Conversely the concatenation of the  
contributions of the processes in group B is stored at each process in  
group A.   The send buffer arguments in group A must be consistent  
with the receive buffer arguments in group B, and vice versa.  
![]()
![]()
![]()
Up: Contents
Next:  Example using  MPI_ALLGATHER
Previous:  Examples using  MPI_SCATTER,  MPI_SCATTERV
Return to MPI-2.2 Standard Index
Return to MPI Forum Home Page
(Unofficial) MPI-2.2 of September 4, 2009
HTML Generated on September 10, 2009