MPI_Alltoall, fonction
Collecte les données d’un groupe et les diffuse à tous les membres d’un groupe. Le MPI_Alltoall est une extension de la fonction MPI_Allgather . Chaque processus envoie des données distinctes à chacun des récepteurs. Le bloc jqui est envoyé à partir du processus i est reçu par le processus j et est placé dans le iième bloc de la mémoire tampon de réception.
Syntaxe
int MPIAPI MPI_Alltoall(
_In_ void *sendbuf,
int sendcount,
MPI_Datatype sendtype,
_Out_ void *recvbuf,
int recvcount,
MPI_Datatype recvtype,
MPI_Comm comm
);
Paramètres
sendbuf [in]
Pointeur vers les données à envoyer à tous les processus du groupe. Le nombre et le type de données des éléments dans la mémoire tampon sont spécifiés dans les paramètres sendcount et sendtype .Si le paramètre comm fait référence à un intracommunicateur, vous pouvez spécifier une option sur place en spécifiant MPI_IN_PLACE dans tous les processus. Les paramètres sendcount et sendtype sont ignorés. Chaque processus entre des données dans l’élément de mémoire tampon de réception correspondant. Le nièmeprocessus envoie des données au nièmeélément de la mémoire tampon de réception.
sendcount
Nombre d’éléments dans la mémoire tampon spécifié dans le paramètre sendbuf . Si sendcount est égal à zéro, la partie données du message est vide.sendtype
Type de données MPI des éléments dans la mémoire tampon d’envoi.recvbuf [out]
Pointeur vers une mémoire tampon qui contient les données reçues de chaque processus. Le nombre et le type de données des éléments dans la mémoire tampon sont spécifiés dans les paramètres recvcount et recvtype .recvcount
Nombre d’éléments dans la mémoire tampon de réception. Si le nombre est égal à zéro, la partie données du message est vide.recvtype
Type de données MPI des éléments dans la mémoire tampon de réception.comm
Handle de communicateur MPI_Comm.
Valeur retournée
Retourne MPI_SUCCESS en cas de réussite. Sinon, la valeur de retour est un code d’erreur.
Dans Fortran, la valeur de retour est stockée dans le paramètre IERROR .
Fortran
MPI_ALLTOALL(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE,
COMM, IERROR)
<type> SENDBUF(*), R.ECVBUF(*)
INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, COMM, IERROR
Remarques
Tous les paramètres sont significatifs sur tous les processus. Le paramètre comm doit être identique sur tous les processus.
La signature de type spécifiée par les paramètres sendcount et sendtype pour un processus doivent être égales à la signature de type spécifiée par les paramètres recvcount et recvtype . Par conséquent, la quantité de données envoyées doit être égale à la quantité de données reçues entre n’importe quelle paire de processus. Les mappages de types distincts entre l’expéditeur et le destinataire sont toujours autorisés.
Si le paramètre comm fait référence à un intracommunicateur, le résultat d’un appel à MPI_ALLGATHER(...)
est comme si chaque processus exécutait un envoi à chaque processus, y compris lui-même, en utilisant MPI_Send(sendbuf + i*sendcount*extent(sendtype), sendcount, sendtype, I, …)
et en recevant de tous les autres processus à l’aide MPI_Recv(recvbuf + i*recvcount*extent(recvtype), recvcount, recvtype, I, …)
de .
Si le paramètre comm fait référence à un intercommunicateur, le résultat est comme si chaque processus du groupe A envoyait un message à chaque processus du groupe B, et vice versa. La mémoiretampon d’envoi j du processus i dans le groupe A doit être cohérente avec la mémoiretampon de réception du processus j dans le groupe B, et vice versa.
Le nombre d’éléments envoyés par les processus du groupe A ne doit pas être égal au nombre d’éléments envoyés par les processus du groupe B. En particulier, vous pouvez déplacer les données dans une seule direction en spécifiant sendcount == 0 pour la communication dans le sens inverse.
Configuration requise
Produit |
Package redistribuable MS-MPI HPC Pack 2012, package redistribuable HPC Pack 2008 R2 MS-MPI, package redistribuable MS-MPI HPC Pack 2008 ou utilitaires clients HPC Pack 2008 |
En-tête |
Mpi.h ; Mpif.h |
Bibliothèque |
Msmpi.lib |
DLL |
Msmpi.dll |