MPI_Alltoallw fonction
Collecte les données d’un groupe et les diffuse à tous les membres d’un groupe. La fonction MPI_Alltoallw est la forme la plus générale d’échange de données complet dans cette API. MPI_Alltoallw permet de spécifier séparément le nombre, le déplacement et le type de données.
Syntaxe
int MPIAPI MPI_Alltoallw(
_In_ void *sendbuf,
_In_ int *sendcounts[],
_In_ int *sdispls[],
_In_ MPI_Datatype sendtypes[],
_Out_ void *recvbuf,
_In_ int *recvcounts[],
_In_ int *rdispls[],
_In_ MPI_Datatype recvtypes[],
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 de la mémoire tampon sont spécifiés dans les paramètres sendcount et sendtype . Chaque élément de la mémoire tampon correspond à un processus dans le groupe.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, sdispls et sendtype sont ignorés. Chaque processus entre des données dans l’élément de mémoire tampon de réception correspondant.
Les données envoyées et reçues doivent avoir le même type de mappage, comme spécifié par le tableau recvcounts et le paramètre recvtype , et sont lues à partir des emplacements du tampon de réception spécifiés par le paramètre rdispls .
sendcounts [in]
Nombre d’éléments de données que ce processus envoie dans la mémoire tampon comme spécifié dans le paramètre sendbuf . Si un élément dans sendcount est égal à zéro, la partie données du message de ce processus est vide.sdispls [in]
Emplacement, en octets, par rapport au paramètre sendbuf , des données pour chaque processus de communication.L’entrée j spécifie le déplacement par rapport au paramètre sendbuf à partir duquel prendre les données sortantes destinées au processus j.
sendtypes [in]
Type de données pour chacun des éléments dans la mémoire tampon d’envoi. L’entrée j spécifie le type de données envoyées pour traiter j dans le groupe.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 de la mémoire tampon sont spécifiés dans les paramètres recvcount et recvtype .recvcounts [in]
Nombre d’éléments de données de chaque processus de communication dans la mémoire tampon de réception.rdispls [in]
Emplacement, en octets, par rapport au paramètre recvbuf , des données de chaque processus de communication. L’entrée i spécifie le déplacement par rapport au paramètre recvbuf dans lequel placer les données entrantes du processus i.Dans les tableaux de paramètres recvbuf, recvcounts et rdispls , le nièmeélément de chaque tableau fait référence aux données reçues du nième processus de communication.
recvtypes [in]
Type de données de chaque élément dans la mémoire tampon. L’entrée i spécifie le type de données reçues du processus i.comm
Handle de communication 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_ALLTOALLW(SENDBUF, SENDCOUNT, SDISPLS, SENDTYPE, RECVBUF, RECVCOUNTS, RDISPLS, RECVTYPE,COMM, IERROR)
<type> SENDBUF(*), R.ECVBUF(*)
INTEGER SENDCOUNT, SENDTYPES(*), SDISPLS(*), RECVCOUNTS(*), RDISPLS(*), RECVTYPE, COMM, IERROR
Remarques
Important
Pour offrir une flexibilité maximale, le déplacement des blocs dans les mémoires tampons d’envoi et de réception est spécifié en octets.
Tous les paramètres sont significatifs sur tous les processus. Le paramètre comm doit être identique sur tous les processus.
Si le paramètre comm fait référence à un intracommunicateur, le bloc jenvoyé à partir du processus i est reçu par le processusj et est placé dans le ième bloc de la mémoire tampon de réception. Ces blocs ne doivent pas tous avoir la même taille.
La signature de type spécifiée par les paramètres sendcounts[j] et sendtypes[j] pour le processus i doit être égale à la signature de type associée aux recvcounts[i] et recvtypes[i] au processus j. 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.
Le résultat d’un appel à la fonction MPI_Alltoallw est comme si chaque processus envoyait un message à tous les autres processus avec MPI_Send(sendbuf+sdispls[i],sendcounts[i],sendtypes[i] ,i,...)
, et recevait un message de chaque autre processus avec un appel à MPI_Recv(recvbuf+rdispls[i],recvcounts[i],recvtypes[i] ,i,...)
.
La spécification de l’option sur place indique que la même quantité et le même type de données sont envoyés et reçus entre deux processus dans le groupe du communicateur. Différentes paires de processus peuvent échanger différentes quantités de données. Les utilisateurs doivent s’assurer que recvcounts[j] et recvtype sur le processus i correspondent à recvcounts[i] et recvtype sur le processus j.
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 inversement. La mémoire tampon d’envoi jdu processus i dans le groupe A doit être cohérente avec la mémoire tampon de réception ith du processus j dans le groupe B, et vice versa.
Configuration requise
Produit |
HpC Pack 2012 MS-MPI Redistributable Package, HPC Pack 2008 R2 MS-MPI Redistributable Package, HPC Pack 2008 MS-MPI Redistributable Package ou HPC Pack 2008 Client Utilities |
En-tête |
Mpi.h ; Mpif.h |
Bibliothèque |
Msmpi.lib |
DLL |
Msmpi.dll |