funktionen MPI_Alltoallw
Samlar in data från och sprider data till alla medlemmar i en grupp. Funktionen MPI_Alltoallw är den mest allmänna formen av fullständigt datautbyte i det här API:et. MPI_Alltoallw möjliggör separat specifikation av antal, deplacement och datatyp.
Syntax
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
);
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 . Varje element i bufferten motsvarar en process i gruppen.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, sdispls och sendtype ignoreras. Varje process anger data i motsvarande mottagningsbuffertelement.
Data som skickas och tas emot måste ha samma typkarta, som anges av matrisen recvcounts och parametern recvtype , och läsas från platserna för mottagningsbufferten enligt parametern rdispls .
sendcounts [in]
Antalet dataelement som den här processen skickar i bufferten enligt vad som anges i parametern sendbuf . Om ett element i sendcount är noll är datadelen av meddelandet från den processen tom.sdispls [in]
Platsen i byte, i förhållande till parametern sendbuf , för data för varje kommunikatorprocess.Post j anger förskjutningen i förhållande till parametern sendbuf som de utgående data som är avsedda för process j ska tas från.
sendtypes [in]
Datatypen för vart och ett av elementen i sändningsbufferten. Post j anger vilken typ av data som skickas för att bearbeta j i gruppen.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 .recvcounts [in]
Antalet dataelement från varje kommunikationsprocess i mottagningsbufferten.rdispls [in]
Platsen i byte i förhållande till parametern recvbuf för data från varje kommunikatorprocess. Post i anger deplacementet i förhållande till parametern recvbuf där inkommande data ska placeras från process i.I parametermatriserna recvbuf, recvcounts och rdispls refererar det n:e elementet i varje matris till de data som tas emot från den n:e kommunikatorprocessen.
recvtypes [in]
Datatypen för varje element i bufferten. Post i anger vilken typ av data som tas emot från process i.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_ALLTOALLW(SENDBUF, SENDCOUNT, SDISPLS, SENDTYPE, RECVBUF, RECVCOUNTS, RDISPLS, RECVTYPE,COMM, IERROR)
<type> SENDBUF(*), R.ECVBUF(*)
INTEGER SENDCOUNT, SENDTYPES(*), SDISPLS(*), RECVCOUNTS(*), RDISPLS(*), RECVTYPE, COMM, IERROR
Kommentarer
Viktigt
För att tillåta maximal flexibilitet anges deplacementen för block i sändnings- och mottagningsbuffertarna i byte.
Alla parametrar är viktiga för alla processer. Kommaparametern måste vara identisk i alla processer.
Om comm-parametern refererar till en intracommunicator tas det j:e blocket som skickas från processen i emot av process j och placeras i det i:e blocket i mottagningsbufferten. Alla dessa block behöver inte ha samma storlek.
Typsignaturen som anges av parametrarna sendcounts[j] och sendtypes[j] för process i måste vara lika med den typsignatur som är associerad med recvcounts[i] och recvtypes[i] vid process j. 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.
Resultatet av ett anrop till funktionen MPI_Alltoallw är som om varje process skickade ett meddelande till alla andra processer med MPI_Send(sendbuf+sdispls[i],sendcounts[i],sendtypes[i] ,i,...)
och tog emot ett meddelande från alla andra processer med ett anrop till MPI_Recv(recvbuf+rdispls[i],recvcounts[i],recvtypes[i] ,i,...)
.
Om du anger alternativet på plats anger du att samma mängd och typ av data skickas och tas emot mellan två processer i kommunikatörsgruppen. Olika processpar kan utbyta olika mängder data. Användarna måste se till att recvcounts[j] och recvtype på process jag matchar recvcounts[i] och recvtype på process j.
Om comm-parametern refererar till en intercommunicator är 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.
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 |