Megosztás:


MPI_Alltoallw függvény

Adatokat gyűjt a csoport összes tagjától, és pontba rendezi az adatokat. Az MPI_Alltoallw függvény a teljes adatcsere legáldottabb formája ebben az API-ban. MPI_Alltoallw lehetővé teszi a darabszám, az elmozdulás és az adattípus külön specifikációját.

Szintaxis

int MPIAPI MPI_Alltoallw(
  _In_  void         *sendbuf,
  _In_  int          *sendcounts[],
  _In_  int          *sdispls[],
  _In_  MPI_Datatype sendtypes[],
  _Out_ void         *recvbuf,
  _In_  int          *recvcounts[],
  _In_  int          *rdispls[],
  _In_  MPI_Datatype recvtypes[],
        MPI_Comm     comm
);

Paraméterek

  • sendbuf [in]
    A csoport összes folyamatának elküldendő adatokra mutató mutató. A puffer elemeinek száma és adattípusa a sendcount és a sendtype paraméterekben van megadva. A puffer minden eleme megfelel a csoport egy folyamatának.

    Ha a comm paraméter egy intrakommunikátorra hivatkozik, megadhat egy helyi beállítást úgy, hogy minden folyamat MPI_IN_PLACE ad meg. A sendcount, a sdispls és a sendtype paraméterek figyelmen kívül lesznek hagyva. Minden folyamat adatokat ad meg a megfelelő fogadópufferelemben.

    Az elküldött és fogadott adatoknak a recvcounts tömb és a recvtype paraméter által meghatározott típusleképezéssel kell rendelkezniük, és az rdispls paraméter által meghatározott fogadópuffer helyéről kell beolvasni őket.

  • sendcounts [in]
    A folyamat által a pufferben küldött adatelemek száma a sendbuf paraméterben megadottak szerint. Ha a sendcount egyik eleme nulla, az üzenetnek az adott folyamatból származó adatrésze üres.

  • sdispls [in]
    Az egyes kommunikátori folyamatok adatainak helye bájtban, a sendbuf paraméterhez viszonyítva.

    A J bejegyzés a sendbuf paraméterhez viszonyított elmozdulást adja meg, amelyből a j folyamatnak szánt kimenő adatokat kell átvenni.

  • sendtypes [in]
    A küldési puffer egyes elemeinek adattípusa. A J bejegyzés a csoport j folyamatához küldött adattípust adja meg.

  • recvbuf [kifelé]
    Az egérmutató egy olyan pufferre, amely az egyes folyamatoktól kapott adatokat tartalmazza. A puffer elemeinek számát és adattípusát a recvcount és a recvtype paraméterek határozzák meg.

  • recvcounts [in]
    A fogadó pufferben lévő egyes kommunikátori folyamatok adatelemeinek száma.

  • rdispls [in]
    Az egyes kommunikációs folyamatok adatainak helye bájtban, a recvbuf paraméterhez viszonyítva. Az i . bejegyzés a recvbuf paraméterhez viszonyított elmozdulást adja meg, amelynél a bejövő adatok az i. folyamatból származnak.

    A recvbuf, recvcounts és rdispls paramétertömbökben az egyes tömbök n.theleme az n. kommunikátori folyamattól kapott adatokra hivatkozik.

  • recvtypes [in]
    A puffer egyes elemeinek adattípusa. Az i . bejegyzés az i. folyamattól kapott adattípust adja meg.

  • Comm
    A MPI_Comm kommunikátor fogantyú.

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 van tárolva.

Fortran

    MPI_ALLTOALLW(SENDBUF, SENDCOUNT, SDISPLS, SENDTYPE, RECVBUF, RECVCOUNTS, RDISPLS, RECVTYPE,COMM, IERROR)
        <type> SENDBUF(*), R.ECVBUF(*)
        INTEGER SENDCOUNT, SENDTYPES(*), SDISPLS(*), RECVCOUNTS(*), RDISPLS(*), RECVTYPE, COMM, IERROR

Megjegyzések

Fontos

A maximális rugalmasság érdekében a küldési és fogadási pufferekben lévő blokkok kiszorítása bájtban van megadva. 

Minden paraméter minden folyamat szempontjából jelentős. A comm paraméternek minden folyamaton azonosnak kell lennie.

Ha a comm paraméter egy intrakommunikátorra hivatkozik, akkor az i. folyamatból küldött jth blokkot a j folyamat fogadja, és a fogadó puffer i. blokkjába helyezi. Ezeknek a blokkoknak nem kell azonos méretűnek lennie.

Az i. folyamat sendcounts[j] és sendtypes[j] paramétere által megadott típusa aláírásnak meg kell egyeznie a jfolyamatbeli recvcounts[i] és recvtypes[i] típusú aláírással. Ezért az elküldött adatok mennyiségének meg kell egyeznie a folyamatpárok között fogadott adatok mennyiségével. A feladó és a fogadó közötti különböző típusú leképezések továbbra is engedélyezettek.

A MPI_Alltoallw függvény hívásának eredménye olyan, mintha minden folyamat üzenetet küldött volna az összes többi folyamatnak a használatával MPI_Send(sendbuf+sdispls[i],sendcounts[i],sendtypes[i] ,i,...), és minden más folyamattól kapott egy üzenetet a hívásával MPI_Recv(recvbuf+rdispls[i],recvcounts[i],recvtypes[i] ,i,...).

A helyszíni beállítás megadása azt jelzi, hogy a rendszer ugyanazt az adatmennyiséget és adattípust küldi el és fogadja a kommunikátorcsoport két folyamata között. A különböző folyamatpárok különböző mennyiségű adatot cserélhetnek. A felhasználóknak gondoskodniuk kell arról, hogy a recvcounts[j] és a recvtype a process i esetében megegyeznek a recvcounts[i] és a recvtype a j folyamaton.

Ha a comm paraméter egy interkommunikátorra hivatkozik, akkor az eredmény olyan, mintha az A csoport minden folyamata üzenetet küld a B csoport minden folyamatának, és fordítva. Az A csoportban lévő i folyamat jth send pufferének konzisztensnek kell lennie a B csoportban lévő j folyamat ith fogadó pufferével, és fordítva.

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 újraterjeszthető csomag vagy HPC Pack 2008 ügyfél-segédprogramok

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_Alltoallv

MPI_Gather

MPI_Scatter

MPI_Send

MPI_Recv