funktionen MPI_Gather
Samlar in data från alla medlemmar i en grupp till en medlem.
Syntax
int MPIAPI MPI_Gather(
_In_ void *sendbuf,
int sendcount,
MPI_Datatype sendtype,
_Out_opt_ void *recvbuf,
int recvcount,
MPI_Datatype recvtype,
int root,
MPI_Comm comm
);
Parametrar
sendbuf [in]
Pekaren till en buffert som innehåller de data som ska skickas till rotprocessen.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. De data som skickas av rotprocessen antas vara på rätt plats i mottagningsbufferten.
sendcount
Antalet element i sändningsbufferten. Om sendcount är noll är datadelen av meddelandet tom.sendtype
Datatypen för varje element i bufferten.recvbuf [ut, valfritt]
Pekaren till en buffert i rotprocessen som innehåller de data som tas emot från varje process. Den innehåller data som skickas av rotprocessen. Den här parametern är bara viktig i rotprocessen. Recvbuf-parametern ignoreras för alla icke-rotprocesser.recvcount
Antalet element som tas emot från varje process. Det här talet är inte det totala antalet objekt i bufferten. Om antalet är noll är datadelen av meddelandet tom. Den här parametern är bara viktig i rotprocessen.recvtype
MPI-datatypen för varje element i bufferten. Den här parametern är bara viktig i rotprocessen.Root
Rangordningen för den mottagande processen inom den angivna kommunikatören.Comm
Den MPI_Comm kommunikationshandtaget.
Returvärde
Returnerar MPI_SUCCESS vid lyckat resultat. Annars är returvärdet en felkod.
I Fortran lagras returvärdet i parametern IERROR .
Fortran
MPI_GATHER(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE, ROOT, COMM, IERROR)
<type> SENDBUF(*), RECVBUF(*)
INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, ROOT, COMM, IERROR
Kommentarer
Alla funktionsparametrar är viktiga för rotprocessen, endast sendbuf, sendcount, sendtype, root och comm är viktiga för de andra processerna. Rot- och kommaparametrarna måste vara identiska i alla processer.
I allmänhet tillåts härledda datatyper för både parametrarna sendtype och recvtype . Typsignaturen som anges av parametrarna sendtype och recvtype i varje process måste vara lika med typsignaturen för parametrarna recvcount och sendcount i rotprocessen. Mängden data som skickas måste vara lika med mängden data som tas emot mellan rotprocessen och varje enskild process. Distinkta typmappningar mellan avsändare och mottagare tillåts fortfarande.
Specifikationen av antal och typer bör inte orsaka att någon plats i roten skrivs mer än en gång. Ett sådant anrop är felaktigt.
Om parametern comm refererar till en intracommunicator skickar alla processer innehållet i dess sändningsbuffert till rotprocessen. Rotprocessen tar emot meddelandena och lagrar dem i rangordning. Resultatet är som om var och en av de n processerna i gruppen körde ett anrop till MPI_Send(sendbuf, sendcount, sendtype, root, …)
och roten hade kört n-anrop till MPI_Recv(recvbuf + i*recvcount*extent(recvtype), recvcount, recvtype, i, …)
. Värdet för extent(recvtype)
hämtas med hjälp av funktionen MPI_Type_get_extent . En alternativ beskrivning av funktionen är att de n meddelanden som skickas av processerna i gruppen sammanfogas i rangordning och det resulterande meddelandet tas emot av roten som av ett anrop till MPI_RECV(recvbuf, recvcountn, recvtype, ...)
. Mottagningsbufferten ignoreras för alla icke-rotprocesser.
Om parametern comm refererar till en intercommunicator omfattar anropet alla processer i intercommunicator, men med en grupp, grupp A, som definierar rotprocessen. Alla processer i den andra gruppen, grupp B, anger samma värde i rotparametern, d.v.s. rotprocessens rangordning i grupp A. Rotprocessen anger värdet MPI_ROOT i rotparametern. Alla andra processer i grupp A anger värdet MPI_PROC_NULL i rotparametern . Data sänds från rotprocessen till alla processer i grupp B. Buffertparametrarna för processerna i grupp B måste vara konsekventa med buffertparametern för rotprocessen.
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 |