Sdílet prostřednictvím


MPI_Gather funkce

Shromáždí data ze všech členů skupiny do jednoho člena.

Syntaxe

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]
    Ukazatel na vyrovnávací paměť obsahující data, která se mají odeslat do kořenového procesu.

    Pokud parametr comm odkazuje na intrakomunikator, můžete zadat místní možnost zadáním MPI_IN_PLACE ve všech procesech. Parametry sendcount a sendtype jsou ignorovány. Každý proces zadává data do odpovídajícího elementu vyrovnávací paměti pro příjem. N.proces odešle data do nth elementu vyrovnávací paměti pro příjem. Předpokládá se, že data odesílaná kořenovým procesem jsou na správném místě ve vyrovnávací paměti pro příjem.

  • sendcount
    Počet prvků ve vyrovnávací paměti pro odesílání. Pokud je hodnota sendcount nulová, datová část zprávy je prázdná.

  • sendtype
    Datový typ každého prvku ve vyrovnávací paměti.

  • recvbuf [out, volitelné]
    Ukazatel na vyrovnávací paměť kořenového procesu, která obsahuje data přijatá z jednotlivých procesů. Zahrnuje data odesílaná kořenovým procesem. Tento parametr je významný pouze v kořenovém procesu. Parametr recvbuf je ignorován pro všechny procesy, které nejsou root.

  • recvcount
    Počet prvků, které jsou přijaty z jednotlivých procesů. Toto číslo není celkový počet položek ve vyrovnávací paměti. Pokud je počet nulový, datová část zprávy je prázdná. Tento parametr je významný pouze v kořenovém procesu.

  • recvtype
    Datový typ MPI každého prvku ve vyrovnávací paměti. Tento parametr je významný pouze v kořenovém procesu.

  • Kořenové
    Pořadí procesu příjmu v zadaném komunikátoru.

  • Komunikace
    Popisovač MPI_Comm communicatoru.

Vrácená hodnota

Vrátí MPI_SUCCESS při úspěchu. V opačném případě je návratovou hodnotou kód chyby.

V nástroji Fortran je vrácená hodnota uložena v parametru IERROR .

Fortran

    MPI_GATHER(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE, ROOT, COMM, IERROR)
        <type> SENDBUF(*), RECVBUF(*)
        INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, ROOT, COMM, IERROR

Poznámky

Všechny parametry funkce jsou významné pro kořenový proces, pouze sendbuf, sendcount, sendtype, root a comm jsou důležité pro ostatní procesy. Parametry root a comm musí být ve všech procesech identické.

Obecně platí, že odvozené datové typy jsou povolené pro parametry sendtype i recvtype . Podpis typu, který je určen parametry sendtype a recvtype v každém procesu musí být roven podpisu typu parametry recvcount a sendcount v kořenovém procesu. Množství odeslaných dat se musí rovnat množství dat přijatých mezi kořenovým procesem a jednotlivými procesy. Mapování různých typů mezi odesílatelem a příjemcem jsou stále povolená.

Specifikace počtů a typů by neměla způsobit, že by se jakékoli umístění v kořenovém adresáři zapisuje vícekrát. Takové volání je chybné.

Pokud parametr comm odkazuje na intrakomunikator, všechny procesy odesílají obsah jeho vyrovnávací paměti pro odesílání do kořenového procesu. Kořenový proces přijímá zprávy a ukládá je v pořadí pořadí. Výsledek je, jako by každý z n procesů ve skupině spustil volání MPI_Send(sendbuf, sendcount, sendtype, root, …). A kořenový uživatel spustil n volání .MPI_Recv(recvbuf + i*recvcount*extent(recvtype), recvcount, recvtype, i, …) Hodnota se extent(recvtype) získá pomocí funkce MPI_Type_get_extent . Alternativním popisem funkce je, že n zpráv odeslaných procesy ve skupině jsou zřetězeny v pořadí a výsledná zpráva je přijata kořenem jako voláním MPI_RECV(recvbuf, recvcountn, recvtype, ...). Vyrovnávací paměť příjmu je ignorována pro všechny procesy, které nejsou kořeny.

Pokud parametr comm odkazuje na interkomunikátor, pak volání zahrnuje všechny procesy v interkomunikátoru, ale s jednou skupinou, skupinou A, která definuje kořenový proces. Všechny procesy v druhé skupině, skupině B, nastavují stejnou hodnotu v kořenovém parametru, tj. pořadí kořenového procesu ve skupině A. Kořenový proces nastaví hodnotu MPI_ROOT v kořenovém parametru. Všechny ostatní procesy ve skupině A nastavují hodnotu MPI_PROC_NULL v kořenovém parametru. Data se vysílají z kořenového procesu do všech procesů ve skupině B. Parametry vyrovnávací paměti procesů ve skupině B musí být konzistentní s parametrem vyrovnávací paměti kořenového procesu.

Požadavky

Produkt

HPC Pack 2012 MS-MPI Redistributable Package, HPC Pack 2008 R2 MS-MPI Redistributable Package, HPC Pack 2008 MS-MPI Redistributable Package nebo HPC Pack 2008 Client Utilities

Hlavička

Mpi.h; Mpif.h

Knihovna

Msmpi.lib

DLL

Msmpi.dll

Viz také

Kolektivní funkce MPI

MPI_Datatype

MPI_Gatherv