Megosztás:


MPI_Gatherv függvény

Változó adatokat gyűjt a csoport összes tagjától egy tagig. A MPI_Gatherv függvény rugalmasságot ad a MPI_Gather függvényhez azáltal, hogy különböző számú adatot engedélyez az egyes folyamatokból.

Szintaxis

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
);

Paraméterek

  • sendbuf [in]
    A leíró egy pufferbe, amely tartalmazza a gyökérfolyamatba küldendő adatokat.

    Ha a komm paraméter egy intrakommunikátorra hivatkozik, a MPI_IN_PLACE minden folyamathoz megadhat egy helyi beállítást. A sendcount és a sendtype paraméterek figyelmen kívül lesznek hagyva. Minden folyamat adatokat ad meg a megfelelő fogadási pufferelemben. Az n. folyamat adatokat küld a fogadópuffer n. elemének. A gyökérfolyamat által küldött adatok feltételezik, hogy a fogadó pufferben a megfelelő helyen találhatóak.

  • sendcount
    A küldési puffer elemeinek száma. Ha a sendcount értéke nulla, az üzenet adatrésze üres.

  • sendtype
    A puffer egyes elemeinek adattípusa.

  • recvbuf [ki, nem kötelező]
    A leíró a gyökérfolyamat pufferéhez, amely tartalmazza az egyes folyamatoktól kapott adatokat, beleértve a gyökérfolyamat által küldött adatokat is. Ez a paraméter csak a gyökérfolyamatban jelentős. A recvbuf paraméter minden nem gyökérfolyamat esetében figyelmen kívül lesz hagyva.

  • recvcounts[] [in, optional]
    Az egyes folyamatoktól kapott elemek száma. A tömb minden eleme a küldési folyamat rangjának felel meg. Ha a szám nulla, az üzenet adatrésze üres. Ez a paraméter csak a gyökérfolyamatban jelentős.

  • displs[] [in, nem kötelező]
    Az egyes kommunikációs folyamatok adatainak helye a recvbuf paraméterhez viszonyítva. A j folyamattól kapott adatok a gyökérfolyamat-eltolás fogadó pufferébe kerülnek, és a sendbuf mutató[j] elemeit bontják.

    A recvbuf, recvcounts és displs paramétertömbökben az egyes tömbök nth eleme az nth communicator folyamattól kapott adatokra hivatkozik.

    Ez a paraméter csak a gyökérfolyamatban jelentős.

  • recvtype
    A puffer egyes elemeinek adattípusa. Ez a paraméter csak a gyökérfolyamatban jelentős.

  • Gyökér
    A fogadó folyamat rangja a megadott kommunikátorban.

  • Comm
    A MPI_Comm communicator leírója.

Visszatérési érték

Sikeres MPI_SUCCESS ad vissza. Ellenkező esetben a visszatérési érték hibakód.

A Fortranban a visszatérési érték az IERROR paraméterben lesz tárolva.

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

Megjegyzések

Minden függvényparaméter jelentős a gyökérfolyamatban, csak a sendbuf, a sendcount, a sendtype, a root és a comm jelentős a többi folyamat esetében. A gyökér- és a comm-paramétereknek minden folyamat esetében azonosnak kell lenniük.

A származtatott adattípusok általában mind a sendtype , mind a recvtype paraméterek esetében engedélyezettek. Az egyes folyamatok sendtype és recvtype paraméterei által megadott típusadminiszt-aláírásnak meg kell egyeznie a recvcount és a sendcount paraméterek típus-aláírásával a gyökérfolyamaton. Az elküldött adatok mennyiségének meg kell egyeznie a gyökérfolyamat és az egyes folyamatok között fogadott adatok mennyiségével. A feladó és a fogadó közötti különböző típusleképek továbbra is engedélyezettek.

A számok és a típusok specifikációja nem okozhatja, hogy a gyökérkönyvtárban lévő helyeket egynél többször kell megírni. Egy ilyen hívás téves.

Ha a komm paraméter egy intrakommunikátorra hivatkozik, minden folyamat elküldi a küldési puffer tartalmát a gyökérfolyamatnak. A gyökérfolyamat fogadja az üzeneteket, és rangsor sorrendben tárolja őket. Az eredmény olyan, mintha a csoport minden n folyamata a következőre MPI_Send(sendbuf, sendcount, sendtype, root, …)irányuló hívást futtatott volna: ; és a gyökér n-hívásokat hajtott végre a következőre MPI_Recv(recvbuf + i*recvcount*extent(recvtype), recvcount, recvtype, i, …): . Az érték extent(recvtype) a MPI_Type_get_extent függvénnyel lesz lekért. A függvény alternatív leírása, hogy a csoportban lévő folyamatok által küldött n üzenetek sorrendben vannak összefűzve, és az eredményül kapott üzenetet a gyökér fogadja, mintha egy hívás a következőre MPI_RECV(recvbuf, recvcountn, recvtype, ...)hív. A fogadó puffer figyelmen kívül lesz hagyva minden nem gyökérfolyamat esetében.

Ha a komm paraméter egy interkommunikátorra hivatkozik, akkor a hívás magában foglalja az interkommunikátor összes folyamatát, de egy olyan csoporttal, az A csoporttal, amely meghatározza a gyökérfolyamatot. A másik csoport összes folyamata, a B csoport, ugyanazt az értéket állítja be a gyökérparaméterben, azaz az A csoport gyökérfolyamatának rangját. A gyökérfolyamat beállítja a gyökérparaméterben MPI_ROOT értéket. Az A csoport összes többi folyamata beállítja a gyökérparaméterben MPI_PROC_NULL értéket. Az adatok a gyökérfolyamatból a B csoport összes folyamatára lesznek továbbítva. A B csoportban lévő folyamatok pufferparamétereinek összhangban kell lenniük a gyökérfolyamat pufferparaméterével.

Követelmények

Termék

HPC Pack 2012 MS-MPI terjeszthető csomag, HPC Pack 2008 R2 MS-MPI terjeszthető csomag, HPC Pack 2008 MS-MPI terjeszthető csomag vagy HPC Pack 2008 Client Utilities

Fejléc

Mpi.h; Mpif.h

Kódtár

Msmpi.lib

DLL

Msmpi.dll

Lásd még

MPI kollektív függvények

MPI_Datatype

MPI_Gather