Megosztás:


MPI_Alltoallv függvény

Adatokat gyűjt a csoport összes tagjától, és pontba rendezi az adatokat. A MPI_Alltoallv függvény rugalmasabbá teszi a MPI_Alltoall függvényt azáltal, hogy az egyes folyamatok különböző mennyiségű adatot engedélyeznek.

Szintaxis

int MPIAPI MPI_Alltoallv(
  _In_  void         *sendbuf,
  _In_  int          *sendcounts,
  _In_  int          *sdispls,
        MPI_Datatype sendtype,
  _Out_ void         *recvbuf,
  _In_  int          *recvcounts,
  _In_  int          *rdispls,
        MPI_Datatype recvtype,
        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 megadott típustérképpel kell rendelkezniük. Az adatok az rdispls paraméter által megadott fogadási puffer helyéről lesznek beolvasva .

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

  • sdispls [in]
    Az egyes kommunikátori folyamatok adatainak helye 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.

  • sendtype
    A küldési puffer elemeinek MPI-adattípusa.

  • recvbuf [kifelé]
    Az egyes folyamatoktól kapott adatokat tartalmazó pufferre mutató mutató. 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 a recvbuf paraméterhez viszonyítva.

    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.

  • recvtype
    A puffer egyes elemeinek MPI-adattípusa.

  • Comm
    A MPI_Comm communicator leíróját adja meg.

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_ALLTOALL(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE,
                COMM, IERROR)
        <type> SENDBUF(*), R.ECVBUF(*)
        INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, COMM, IERROR

Megjegyzések

A sendcount által megadott típusa aláírásnak és a folyamat sendtype paramétereinek meg kell egyeznie a recvcount által megadott típusaa aláírással, valamint a fogadó folyamat recvtype paramétereivel. 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.

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.

A MPI_Alltoallv függvény meghívásának eredménye olyan, mintha minden folyamat üzenetet küldött volna minden más folyamatnak a következővel: , MPI_Send(sendbuf + sdispls[i]*extent(sendtype), sendcounts[i], sendtype, I, …)és minden más folyamattól kapott egy üzenetet a hívásával MPI_Recv(recvbuf + rdispls[i]*extent(recvtype), recvcounts[i], recvtype, 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. Ez a szimmetrikus csere olyan alkalmazásokban lehet hasznos, ahol az elküldendő adatokat a küldő folyamat nem használja fel a MPI_Alltoallv függvényhívás után.

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_Alltoall

MPI_Gather

MPI_Scatter

MPI_Send

MPI_Recv