MPI_Gatherv, funkcja
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 |