Sdílet prostřednictvím


MPI_Allgather funkce

Shromáždí data ze všech členů skupiny a odešle je všem členům skupiny. Funkce MPI_Allgather je podobná funkci MPI_Gather s tím rozdílem, že odesílá data do všech procesů, nikoli pouze do kořenového adresáře. Pravidla použití pro MPI_Allgather odpovídají pravidlům pro MPI_Gather.

Syntaxe

int MPIAPI MPI_Allgather(
  _In_  void         *sendbuf,
  _In_  int          sendcount,
  _In_  MPI_Datatype sendtype,
  _Out_ void         *recvbuf,
        int          recvcount,
        MPI_Datatype recvtype,
        MPI_Comm     comm
);

Parametry

  • sendbuf [in]
    Ukazatel na data, která se mají odeslat všem procesům ve skupině. Počet a datový typ prvků ve vyrovnávací paměti jsou zadány v parametrech sendcount a sendtype . Každý prvek ve vyrovnávací paměti odpovídá procesu ve skupině.

    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.

  • sendcount [in]
    Počet prvků ve vyrovnávací paměti zadaný v parametru sendbuf . Pokud je hodnota sendcount nulová, datová část zprávy je prázdná.

  • sendtype [in]
    Datový typ MPI prvků ve vyrovnávací paměti pro odesílání.

  • recvbuf [out]
    Ukazatel na vyrovnávací paměť, která obsahuje data přijatá z jednotlivých procesů. Počet a datový typ prvků ve vyrovnávací paměti jsou zadané v parametrech recvcount a recvtype .

  • recvcount
    Počet prvků v vyrovnávací paměti pro příjem. Pokud je počet nulový, datová část zprávy je prázdná.

  • recvtype
    Datový typ MPI prvků v vyrovnávací paměti pro příjem.

  • 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_ALLGATHER(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE, COMM, IERROR)
        <type> SENDBUF(*), RECVBUF(*)
        INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, COMM, IERROR

Poznámky

Podpis typu přidružený k parametru sendtype v procesu musí být roven podpisu typu, který je přidružený k parametru recvtype v jakémkoli jiném procesu.

Pokud parametr comm odkazuje na intrakomunikator, výsledek volání MPI_ALLGATHER(...) je, jako by všechny procesy spustily n volání MPI_Gather(sendbuf,sendcount,sendtype,recvbuf,recvcount,recvtype,root,comm) pro root = 0 , ..., n-1.

Pokud parametr comm odkazuje na interkomunikátor, pak každý proces jedné skupiny, například skupina A, přispívá počtem datových položek, které jsou zadány v parametru sendcount . Tato data jsou zřetězena a výsledek je uložen v každém procesu ve druhé skupině B. Naopak zřetězení dat procesů ve skupině B je uloženo v každém procesu ve skupině A. Parametry vyrovnávací paměti pro odesílání ve skupině A musí být konzistentní s parametry vyrovnávací paměti pro příjem ve skupině B a naopak.

Počet položek odeslaných procesy ve skupině A se nemusí rovnat počtu položek odesílaných procesy ve skupině B. Konkrétně můžete přesunout data pouze v jednom směru zadáním sendcount == 0 pro komunikaci v opačném směru.

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_Allgather