Udostępnij za pośrednictwem


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

Zobacz też

Funkcje zbiorowe MPI

MPI_Datatype

MPI_Gather