Udostępnij za pomocą


MPI_Gather, funkcja

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

Zobacz też

Funkcje zbiorowe MPI

MPI_Datatype

MPI_Gatherv