MPI_Scatter, funkcja
Rozprasza dane z jednego elementu członkowskiego we wszystkich członkach grupy. Funkcja MPI_Scatter wykonuje odwrotność operacji wykonywanej przez funkcję MPI_Gather .
Składnia
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
);
Parametry
sendbuf [in]
Dojście do buforu zawierającego dane, które mają być wysyłane przez proces główny.Parametr sendbuf jest ignorowany dla wszystkich procesów innych niż główne.
Jeśli parametr comm odwołuje się do wewnątrzkomunikatora, możesz określić opcję w miejscu, określając MPI_IN_PLACE w procesie głównym. Parametry recvcount i recvtype są ignorowane. Wektor punktowy jest nadal uznawany za zawierający n segmentów, gdzie n jest rozmiarem grupy; segment odpowiadający procesowi głównemu nie jest przenoszony.
sendcount
Liczba elementów w buforze wysyłania. Jeśli parametr sendcount ma wartość zero, część danych wiadomości jest pusta.Parametr sendcount jest ignorowany dla wszystkich procesów innych niż główne.
sendtype
Typ danych każdego elementu w buforze.Parametr sendcount jest ignorowany dla wszystkich procesów innych niż główne.
recvbuf [out]
Dojście do buforu zawierającego dane odbierane w każdym procesie. Liczba i typ danych elementów w buforze są określone w parametrach recvcount i recvtype .recvcount
Liczba elementów w buforze odbioru. Jeśli liczba jest równa zero, część danych komunikatu jest pusta.recvtype
Typ danych elementów w buforze odbioru.Głównego
Ranga procesu wysyłania w określonym komunikatorze.Comm
Uchwyt komunikatora MPI_Comm .
Wartość zwracana
Zwraca MPI_SUCCESS powodzenia. W przeciwnym razie wartość zwracana jest kodem błędu.
W fortran wartość zwracana jest przechowywana w parametrze IERROR .
Fortran
MPI_SCATTER(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE, ROOT, COMM, IERROR)
<type> SENDBUF(*), RECVBUF(*)
INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, ROOT, COMM, IERROR
Uwagi
Efekt funkcji MPI_Scatter jest taki, jakby proces główny wysyła komunikat przy użyciu funkcji MPI_Send . Ten komunikat jest podzielony na n równych segmentów, po jednym dla każdego członka grupy. Segment ijest wysyłany do procesu iw grupie.
Jeśli comm jest intracommunicator, wynik jest tak, jakby główny wykonał n operacji MPI_Send(sendbuf + i*sendcount*extent(sendtype), sendcount, sendtype, I, …)
wysyłania ; a każdy proces wykonał odbieranie, MPI_Recv(recvbuf, recvcount, recvtype, i,…)
.
Sygnatura typu określona przez parametry sendcount i sendtype dla procesu głównego musi być równa podpisowi typu określonemu przez recvcount i parametrom recvtype dla wszystkich procesów. W związku z tym ilość wysyłanych danych musi być równa ilości danych odebranych między dowolną parą procesów. Różne mapy typów między nadawcą i odbiornikiem są nadal dozwolone.
Wszystkie parametry funkcji są istotne w procesie głównym, tylko recvbuf, recvcount, recvtype, root i comm parametry są istotne w innych procesach. Parametry katalogu głównego i comm muszą być identyczne we wszystkich procesach.
Specyfikacja liczb i typów nie powinna powodować odczytywania więcej niż jednego miejsca w katalogu głównym.
Jeśli parametr comm odwołuje się do intercommunicator, wywołanie obejmuje wszystkie procesy w interkomunikatorze, ale z jedną grupą, grupą A, która definiuje proces główny. Wszystkie procesy w innej grupie, grupa B, ustaw tę samą wartość w parametrze głównym , czyli rangę procesu głównego w grupie A. Proces główny ustawia wartość MPI_ROOT w parametrze głównym . Wszystkie inne procesy w grupie A ustawiają wartość MPI_PROC_NULL w parametrze głównym . Dane są emitowane z procesu głównego do wszystkich procesów w grupie B. Parametry buforu procesów w grupie B muszą być spójne z parametrem buforu procesu głównego.
Wymagania
Produkt |
Pakiet redystrybucyjny PROGRAMU HPC Pack 2012 MS-MPI, pakiet redystrybucyjny HPC Pack 2008 R2 MS-MPI, pakiet redystrybucyjny PAKIETU HPC Pack 2008 MS-MPI lub narzędzia klienckie PAKIETU HPC Pack 2008 |
Nagłówek |
Mpi.h; Mpif.h |
Biblioteka |
Msmpi.lib |
DLL |
Msmpi.dll |