funktionen MPI_Alltoall
Samlar in data från och sprider data till alla medlemmar i en grupp. MPI_Alltoall är ett tillägg för funktionen MPI_Allgather. Varje process skickar distinkta data till var och en av mottagarna. Den jth block som skickas från processen jag tas emot av process j och placeras i i: e blocket i mottagande bufferten.
Syntax
int MPIAPI MPI_Alltoall(
_In_ void *sendbuf,
int sendcount,
MPI_Datatype sendtype,
_Out_ void *recvbuf,
int recvcount,
MPI_Datatype recvtype,
MPI_Comm comm
);
Parametrar
sendbuf [in]
Pekaren till de data som ska skickas till alla processer i gruppen. Antalet och datatypen för elementen i bufferten anges i parametrarna sendcount och sendtype .Om comm-parametern refererar till en intracommunicator kan du ange ett alternativ på plats genom att ange MPI_IN_PLACE i alla processer. Parametrarna sendcount och sendtype ignoreras. Varje process anger data i motsvarande mottagningsbuffertelement. Den n:e processen skickar data till det n:e elementet i mottagningsbufferten.
sendcount
Antalet element i bufferten som anges i parametern sendbuf . Om sendcount är noll är datadelen av meddelandet tom.sendtype
MPI-datatypen för elementen i sändningsbufferten.recvbuf [out]
Pekaren till en buffert som innehåller de data som tas emot från varje process. Antalet och datatypen för elementen i bufferten anges i parametrarna recvcount och recvtype .recvcount
Antalet element i mottagningsbufferten. Om antalet är noll är datadelen av meddelandet tom.recvtype
MPI-datatypen för elementen i mottagarbufferten.Comm
MPI_Comm communicator-handtaget.
Returvärde
Returnerar MPI_SUCCESS vid lyckat resultat. Annars är returvärdet en felkod.
I Fortran lagras returvärdet i parametern IERROR .
Fortran
MPI_ALLTOALL(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE,
COMM, IERROR)
<type> SENDBUF(*), R.ECVBUF(*)
INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, COMM, IERROR
Kommentarer
Alla parametrar är viktiga för alla processer. Kommaparametern måste vara identisk i alla processer.
Typsignaturen som anges av sendcount- och sendtype-parametrarna för en process måste vara lika med den typsignatur som anges av parametrarna recvcount och recvtype . Därför måste mängden data som skickas vara lika med mängden data som tas emot mellan alla processer. Distinkta typkartor mellan avsändare och mottagare tillåts fortfarande.
Om comm-parametern refererar till en intracommunicator är resultatet av ett anrop till MPI_ALLGATHER(...)
som om varje process körde en sändning till varje process, inklusive sig själv med hjälp MPI_Send(sendbuf + i*sendcount*extent(sendtype), sendcount, sendtype, I, …)
av , och att ta emot från alla andra processer med hjälp MPI_Recv(recvbuf + i*recvcount*extent(recvtype), recvcount, recvtype, I, …)
av .
Om kommaparametern refererar till en intercommunicator blir resultatet som om varje process i grupp A skickar ett meddelande till varje process i grupp B och vice versa. J: e skicka buffert av process i i grupp A bör vara konsekvent med ith ta emot bufferten av process j i grupp B, och vice versa.
Antalet objekt som skickas av processer i grupp A behöver inte vara lika med antalet objekt som skickas av processer i grupp B. I synnerhet kan du flytta data i endast en riktning genom att ange sendcount == 0 för kommunikationen i omvänd riktning.
Krav
Produkt |
HPC Pack 2012 MS-MPI Redistributable Package, HPC Pack 2008 R2 MS-MPI Redistributable Package, HPC Pack 2008 MS-MPI Redistributable Package eller HPC Pack 2008 Client Utilities |
Huvud |
Mpi.h; Mpif.h |
Bibliotek |
Msmpi.lib |
DLL |
Msmpi.dll |