Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Zbiera dane ze wszystkich członków grupy do jednego członka.
Składnia
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
);
Parametry
sendbuf [in]
Wskaźnik do buforu zawierającego dane, które mają być wysyłane do procesu głównego.Jeśli parametr comm odwołuje się do wewnątrzpolecenia, można określić opcję w miejscu, określając MPI_IN_PLACE we wszystkich procesach. Parametry sendcount i sendtype są ignorowane. Każdy proces wprowadza dane w odpowiednim elemecie buforu odbierania. Nproces wysyła dane do nelementu buforu odbierania. Zakłada się, że dane wysyłane przez proces główny będą znajdować się w prawidłowym miejscu w buforze odbierania.
sendcount
Liczba elementów w buforze wysyłania. Jeśli pole sendcount ma wartość zero, część danych komunikatu jest pusta.sendtype
Typ danych każdego elementu w buforze.recvbuf [out, opcjonalnie]
Wskaźnik do buforu w procesie głównym zawierającym dane odbierane z każdego procesu. Obejmuje ona dane wysyłane przez proces główny. Ten parametr jest znaczący tylko w procesie głównym. Parametr recvbuf jest ignorowany dla wszystkich procesów innych niż root.recvcount
Liczba elementów odbieranych z każdego procesu. Ta liczba nie jest całkowitą liczbą elementów w buforze. Jeśli liczba jest równa zero, część danych komunikatu jest pusta. Ten parametr jest znaczący tylko w procesie głównym.recvtype
Typ danych MPI każdego elementu w buforze. Ten parametr jest znaczący tylko w procesie głównym.Głównego
Ranga procesu odbierania w określonym komunikatorze.Comm
Uchwyt komunikatora MPI_Comm .
Wartość zwracana
Zwraca MPI_SUCCESS po powodzeniu. W przeciwnym razie zwracana wartość jest kodem błędu.
W fortran wartość zwracana jest przechowywana w parametrze IERROR .
Fortran
MPI_GATHER(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE, ROOT, COMM, IERROR)
<type> SENDBUF(*), RECVBUF(*)
INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, ROOT, COMM, IERROR
Uwagi
Wszystkie parametry funkcji są znaczące w procesie głównym, tylko sendbuf, sendcount, sendtype, root i comm są istotne w innych procesach. Parametry katalogu głównego i comm muszą być identyczne we wszystkich procesach.
Ogólnie rzecz biorąc, typy danych pochodnych są dozwolone zarówno dla parametrów sendtype , jak i recvtype . Sygnatura typu określona przez parametry sendtype i recvtype w każdym procesie musi być równa podpisowi typu recvcount i parametrom sendcount w procesie głównym. Ilość wysyłanych danych musi być równa ilości danych odbieranych między procesem głównym a poszczególnymi procesami. Różne mapy typów między nadawcą a odbiornikiem są nadal dozwolone.
Specyfikacja liczby i typów nie powinna spowodować zapisania więcej niż jednego miejsca w katalogu głównym. Takie wywołanie jest błędne.
Jeśli parametr comm odwołuje się do wewnątrzkomunikatora, wszystkie procesy wysyłają zawartość buforu wysyłania do procesu głównego. Proces główny odbiera komunikaty i przechowuje je w kolejności klasyfikacji. Wynik jest taki, jakby każdy z n procesów w grupie wykonał wywołanie do MPI_Send(sendbuf, sendcount, sendtype, root, …); a katalog główny wykonał n wywołań do MPI_Recv(recvbuf + i*recvcount*extent(recvtype), recvcount, recvtype, i, …). Wartość extent(recvtype) jest uzyskiwana przy użyciu funkcji MPI_Type_get_extent . Alternatywny opis funkcji polega na tym, że n komunikatów wysyłanych przez procesy w grupie są łączone w kolejności rangi, a wynikowy komunikat jest odbierany przez element główny tak, jakby przez wywołanie metody MPI_RECV(recvbuf, recvcountn, recvtype, ...). Bufor odbierania jest ignorowany dla wszystkich procesów innych niż root.
Jeśli parametr comm odwołuje się do interpolenicy, wywołanie obejmuje wszystkie procesy w interpoluniku, 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 ustaw 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 HPC Pack 2012 MS-MPI, pakiet redystrybucyjny HPC Pack 2008 R2 MS-MPI, pakiet redystrybucyjny HPC Pack 2008 MS-MPI lub narzędzia klienckie HPC Pack 2008 |
Nagłówek |
Mpi.h; Mpif.h |
Biblioteka |
Msmpi.lib |
DLL |
Msmpi.dll |