Sdílet prostřednictvím


MPI_Alltoall funkce

Shromažďuje data ze všech členů skupiny a rozptyluje je do všech členů skupiny. MPI_Alltoall je rozšířením funkce MPI_Allgather. Každý proces odesílá každému z příjemců samostatná data. J thblok odeslaný z procesu i je přijat procesem j a je umístěn v itém bloku příjmové vyrovnávací paměti.

Syntaxe

int MPIAPI MPI_Alltoall(
  _In_  void         *sendbuf,
        int          sendcount,
        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 uvedeny v parametrech sendcount a sendtype .

    Pokud parametr comm odkazuje na intracommunicator, můžete zadat místní možnost zadáním MPI_IN_PLACE ve všech procesech. Parametry sendcount a sendtype se ignorují. Každý proces zadává data do odpovídajícího prvku vyrovnávací paměti pro příjem. N. proces odešle data do n. prvku vyrovnávací paměti pro příjem.

  • počet odeslání
    Počet prvků ve vyrovnávací paměti, který je zadán v parametru sendbuf . Pokud je hodnota sendcount nulová, je datová část zprávy prázdná.

  • typ odeslání
    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 uvedeny v parametrech recvcount a recvtype .

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

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

  • Komunikace
    Popisovač MPI_Comm komunikátoru.

Vrácená hodnota

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

Ve Fortranu je vrácená hodnota uložena v parametru IERROR .

Fortran

    MPI_ALLTOALL(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE,
                COMM, IERROR)
        <type> SENDBUF(*), R.ECVBUF(*)
        INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, COMM, IERROR

Poznámky

Všechny parametry jsou důležité pro všechny procesy. Parametr comm musí být ve všech procesech identický.

Podpis typu určený parametrem sendcount a sendtype pro proces se musí rovnat podpisu typu určenému parametry recvcount a recvtype . Množství odeslaných dat se proto musí rovnat množství dat přijatých mezi libovolnými dvojicemi procesů. Mapování různých typů mezi odesílatelem a příjemcem je stále povolené.

Pokud parametr comm odkazuje na intracommunicator, výsledek volání MPI_ALLGATHER(...) je, jako by každý proces spustil odeslání do každého procesu, včetně sebe pomocí MPI_Send(sendbuf + i*sendcount*extent(sendtype), sendcount, sendtype, I, …), a příjem z každého druhého procesu pomocí .MPI_Recv(recvbuf + i*recvcount*extent(recvtype), recvcount, recvtype, I, …)

Pokud parametr comm odkazuje na interkomunikator, výsledek je, jako kdyby každý proces ve skupině A odeslal zprávu každému procesu ve skupině B a naopak. Vyrovnávací paměť proodesílání procesu i ve skupině A by měla být konzistentní s vyrovnávací pamětí ipříjmu procesu j ve skupině B a naopak.

Počet položek odeslaných procesy ve skupině A se nemusí rovnat počtu položek odeslaných procesy ve skupině B. Konkrétně můžete data přesunout pouze v jednom směru zadáním hodnoty 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; Soubor Mpif.h

Knihovna

Msmpi.lib

DLL

Msmpi.dll

Viz také

Kolektivní funkce MPI

MPI_Datatype

MPI_Allgather

MPI_Send

MPI_Recv