Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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 |