Sdílet prostřednictvím


MPI_Scatterv funkce

Rozsadí data od jednoho člena do všech členů skupiny. Funkce MPI_Scatterv provádí inverzní funkci k operaci, kterou provádí funkce MPI_Gatherv .

Syntaxe

int MPIAPI MPI_Scatterv(
  _In_  void         *sendbuf,
  _In_  int          *sendcounts,
  _In_  int          *displs,
        MPI_Datatype sendtype,
  _Out_ void         *recvbuf,
        int          recvcount,
        MPI_Datatype recvtype,
        int          root,
        MPI_Comm     comm
);

Parametry

  • sendbuf [in]
    Ukazatel na vyrovnávací paměť obsahující data, která mají být odeslána kořenovým procesem.

    Parametr sendbuf je ignorován pro všechny procesy, které nejsou kořenové.

    Pokud parametr comm odkazuje na intracommunicator, můžete zadat místní možnost zadáním MPI_IN_PLACE v kořenovém procesu. Parametry recvcount a recvtype se ignorují. Bodový vektor je stále považován za obsahující n segmentů, kde n je velikost skupiny; segment, který odpovídá kořenovému procesu, se nepřesune.

  • počet odeslání [v]
    Počet prvků, které se mají odeslat do každého procesu. Pokud je sendcount[i] nula, datová část zprávy pro tento proces je prázdná.

    Parametr sendcount je ignorován pro všechny procesy, které nejsou kořenem.

  • displs [v]
    Umístění dat, která se mají odeslat do jednotlivých procesů komunikátoru. Každé umístění v poli je relativní vzhledem k odpovídajícímu prvku pole sendbuf .

    V polích parametrů sendbuf, sendcounts a displs odkazuje ntý prvek každého pole na data, která mají být odeslána n-tohoprocesu komunikátoru.

    Tento parametr je významný pouze v kořenovém procesu.

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

    Parametr sendcount je ignorován pro všechny procesy, které nejsou kořenem.

  • recvbuf [out]
    Ukazatel na vyrovnávací paměť, která obsahuje data přijatá v jednotlivých procesech. 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 prvků v vyrovnávací paměti pro příjem.

  • Kořenové
    Pořadí v procesu odesílání v rámci zadaného komunikátoru.

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

Poznámky

Funkce MPI_Scatterv rozšiřuje funkce MPI_Scatter tím, že umožňuje odesílat do každého procesu různý počet dat zadaný v poli sendcounts .

Specifikace počtů, typů a posunutí by neměla způsobit, že by se žádné umístění v kořenovém adresáři četlo vícekrát.

Všechny parametry funkce jsou významné pro kořenový proces, pouze parametry recvbuf, recvcount, recvtype, root a comm jsou významné pro ostatní procesy. Parametry root a comm musí být ve všech procesech identické.

Podpis typu určený parametrem sendcount a parametry sendtype pro kořenový proces se musí rovnat podpisu typu určenému recvcount a parametrům recvtype pro všechny procesy. 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 je comm intracommunicator, výsledek je, jako by kořen spustil n operace MPI_Send(sendbuf + displs[i]*extent(sendtype), sendcounts[i], sendtype, I, …)odeslání ; a každý proces spustil příjem, MPI_Recv(recvbuf, recvcount, recvtype, i,…).

Pokud parametr comm odkazuje na interkomunikator, 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, nastaví 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 parametru root . Všechny ostatní procesy ve skupině A nastavte hodnotu MPI_PROC_NULL v kořenovém parametru. Data se vysílaly 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; Soubor Mpif.h

Knihovna

Msmpi.lib

DLL

Msmpi.dll

Viz také

Kolektivní funkce MPI

MPI_Datatype

MPI_Gather

MPI_Gatherv

MPI_Scatter