MPI_Alltoall funzione
Raccoglie i dati da e dispersione dei dati a tutti i membri di un gruppo. Il MPI_Alltoall è un'estensione della funzione MPI_Allgather . Ogni processo invia dati distinti a ognuno dei ricevitori. Il blocco jth inviato dal processo i viene ricevuto dal processo j e viene inserito nel blocco idel buffer di ricezione.
Sintassi
int MPIAPI MPI_Alltoall(
_In_ void *sendbuf,
int sendcount,
MPI_Datatype sendtype,
_Out_ void *recvbuf,
int recvcount,
MPI_Datatype recvtype,
MPI_Comm comm
);
Parametri
sendbuf [in]
Puntatore ai dati da inviare a tutti i processi del gruppo. Il numero e il tipo di dati degli elementi nel buffer vengono specificati nei parametri sendcount e sendtype .Se il parametro comm fa riferimento a un intracommunicator, è possibile specificare un'opzione sul posto specificando MPI_IN_PLACE in tutti i processi. I parametri sendcount e sendtype vengono ignorati. Ogni processo immette i dati nell'elemento buffer di ricezione corrispondente. Il processo ninvia i dati all'elemento ndel buffer di ricezione.
sendcount
Numero di elementi nel buffer specificato nel parametro sendbuf . Se sendcount è zero, la parte dei dati del messaggio è vuota.sendtype
Tipo di dati MPI degli elementi nel buffer di invio.recvbuf [out]
Puntatore a un buffer contenente i dati ricevuti da ogni processo. Il numero e il tipo di dati degli elementi nel buffer vengono specificati nei parametri recvcount e recvtype .recvcount
Numero di elementi nel buffer di ricezione. Se il conteggio è zero, la parte dei dati del messaggio è vuota.recvtype
Tipo di dati MPI degli elementi nel buffer di ricezione.Comm
Handle del comunicatore MPI_Comm.
Valore restituito
Restituisce MPI_SUCCESS sull'esito positivo. In caso contrario, il valore restituito è un codice di errore.
In Fortran il valore restituito viene archiviato nel parametro IERROR .
Fortran
MPI_ALLTOALL(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE,
COMM, IERROR)
<type> SENDBUF(*), R.ECVBUF(*)
INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, COMM, IERROR
Commenti
Tutti i parametri sono significativi in tutti i processi. Il parametro comm deve essere identico in tutti i processi.
La firma del tipo specificata dai parametri sendcount e sendtype per un processo deve essere uguale alla firma del tipo specificata dai parametri recvcount e recvtype . Pertanto, la quantità di dati inviati deve essere uguale alla quantità di dati ricevuti tra qualsiasi coppia di processi. Le mappe dei tipi distinti tra mittente e ricevitore sono ancora consentite.
Se il parametro comm fa riferimento a un intracommunicator, il risultato di una chiamata a MPI_ALLGATHER(...)
è come se ogni processo ha eseguito un invio a ogni processo, incluso se stesso usando e ricevendo da ogni altro processo usando MPI_Send(sendbuf + i*sendcount*extent(sendtype), sendcount, sendtype, I, …)
MPI_Recv(recvbuf + i*recvcount*extent(recvtype), recvcount, recvtype, I, …)
.
Se il parametro comm fa riferimento a un intercommunicator, il risultato è come se ogni processo nel gruppo A invia un messaggio a ogni processo nel gruppo B e viceversa. Il buffer di invio jth del processo i nel gruppo A deve essere coerente con il buffer di ricezione delprocesso j nel gruppo B e viceversa.
Il numero di elementi inviati dai processi nel gruppo A, non deve essere uguale al numero di elementi inviati dai processi nel gruppo B. In particolare, è possibile spostare i dati in una sola direzione specificando sendcount == 0 per la comunicazione nella direzione inversa.
Requisiti
Prodotto |
Pacchetto ridistribuibile HPC Pack 2012 MS-MPI Redistributable Package, HPC Pack 2008 R2 MS-MPI Redistributable Package, HPC Pack 2008 MS-MPI Redistributable Package o HPC Pack 2008 Utilità client |
Intestazione |
Mpi.h; Mpif.h |
Libreria |
Msmpi.lib |
DLL |
Msmpi.dll |