funktionen MPI_Scatter
Sprider data från en medlem över alla medlemmar i en grupp. Funktionen MPI_Scatter utför inverteringen av den åtgärd som utförs av funktionen MPI_Gather .
Syntax
int MPIAPI MPI_Scatter(
_In_ void *sendbuf,
int sendcount,
MPI_Datatype sendtype,
_Out_ void *recvbuf,
int recvcount,
MPI_Datatype recvtype,
int root,
MPI_Comm comm
);
Parametrar
sendbuf [in]
Handtaget till en buffert som innehåller de data som ska skickas av rotprocessen.Parametern sendbuf ignoreras för alla icke-rotprocesser.
Om comm-parametern refererar till en intracommunicator kan du ange ett alternativ på plats genom att ange MPI_IN_PLACE i rotprocessen. Parametrarna recvcount och recvtype ignoreras. Den spridda vektorn anses fortfarande innehålla n segment, där n är gruppstorleken. segmentet som motsvarar rotprocessen flyttas inte.
sendcount
Antalet element i sändningsbufferten. Om sendcount är noll är datadelen av meddelandet tom.Parametern sendcount ignoreras för alla icke-rotprocesser.
sendtype
Datatypen för varje element i bufferten.Parametern sendcount ignoreras för alla icke-rotprocesser.
recvbuf [out]
Handtaget till en buffert som innehåller de data som tas emot för 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
Datatypen för elementen i mottagningsbufferten.Root
Rangordningen för sändningsprocessen inom den angivna kommunikatören.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_SCATTER(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE, ROOT, COMM, IERROR)
<type> SENDBUF(*), RECVBUF(*)
INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, ROOT, COMM, IERROR
Kommentarer
Effekten av funktionen MPI_Scatter är som om rotprocessen skickar ett meddelande med hjälp av funktionen MPI_Send . Det här meddelandet är uppdelat i n lika stora segment, ett för varje medlem i gruppen. Det i:e segmentet skickas till den i:e processen i gruppen.
Om kommatecken är en intracommunicator blir resultatet som om roten körde n send-åtgärder MPI_Send(sendbuf + i*sendcount*extent(sendtype), sendcount, sendtype, I, …)
och varje process körde en mottagning, MPI_Recv(recvbuf, recvcount, recvtype, i,…)
.
Typsignaturen som anges av parametrarna sendcount och sendtype för rotprocessen måste vara lika med den typsignatur som anges av rekkontot och rekttypsparametrar för alla processer. 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.
Alla funktionsparametrar är viktiga för rotprocessen, endast parametrarna recvbuf, recvcount, recvtype, root och comm är viktiga för de andra processerna. Rot- och kommaparametrarna måste vara identiska i alla processer.
Specifikationen av antal och typer bör inte göra att någon plats i roten läse mer än en gång.
Om comm-parametern 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 |