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 zmiennych ze wszystkich członków grupy do jednego członka. Funkcja MPI_Gatherv zapewnia elastyczność funkcji MPI_Gather , umożliwiając różną liczbę danych z każdego procesu.
Składnia
int MPIAPI MPI_Gatherv(
_In_ void *sendbuf,
int sendcount,
MPI_Datatype sendtype,
_Out_opt_ void *recvbuf,
_In_opt_ int *recvcounts[],
_In_opt_ int *displs[],
MPI_Datatype recvtype,
int root,
MPI_Comm comm
);
Parametry
sendbuf [in]
Dojście do buforu zawierającego dane do wysłania do procesu głównego.Jeśli parametr comm odwołuje się do wewnątrzkomunikatora, 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 odpowiadającym mu elemecie buforu odbioru. Nproces wysyła dane do nelement buforu odbioru. Przyjmuje się, że dane wysyłane przez proces główny są w prawidłowym miejscu w buforze odbioru.
sendcount
Liczba elementów w buforze wysyłania. Jeśli parametr sendcount ma wartość zero, część danych wiadomości jest pusta.sendtype
Typ danych każdego elementu w buforze.recvbuf [out, optional]
Dojście do buforu w procesie głównym, który zawiera dane odbierane z każdego procesu, w tym dane wysyłane przez proces główny. Ten parametr jest istotny tylko w procesie głównym. Parametr recvbuf jest ignorowany dla wszystkich procesów innych niż główne.recvcounts[] [in, optional]
Liczba elementów otrzymanych z każdego procesu. Każdy element w tablicy odpowiada rangi procesu wysyłania. Jeśli liczba jest równa zero, część danych komunikatu jest pusta. Ten parametr jest istotny tylko w procesie głównym.displs[] [in, optional]
Lokalizacja względem parametru recvbuf danych z każdego procesu komunikatora. Dane odbierane z procesu j są umieszczane w buforze odbioru przesunięcia procesu głównego rozprasza elementy z wskaźnika sendbuf .W recvbuf, recvcounts i displs tablic parametrów nelement każdej tablicy odnosi się do danych, które są odbierane z procesu komunikatora n.
Ten parametr jest istotny tylko w procesie głównym.
recvtype
Typ danych każdego elementu w buforze. Ten parametr jest istotny tylko w procesie głównym.Głównego
Ranga procesu odbierania w ramach określonego komunikatora.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_GATHERV(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNTS, DISPLS, RECVTYPE, ROOT, COMM, IERROR)
<type> SENDBUF(*), RECVBUF(*)
INTEGER SENDCOUNT, SENDTYPE, RECVCOUNTS(*), DISPLS(*), RECVTYPE, ROOT, COMM, IERROR
Uwagi
Wszystkie parametry funkcji są istotne 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ą i odbiornikiem są nadal dozwolone.
Specyfikacja liczb i typów nie powinna spowodować zapisania żadnej lokalizacji w katalogu głównym więcej niż jeden raz. 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, które są wykonywane 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ż główne.
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 |