Megosztás:


MPI_Alltoall függvény

Adatokat gyűjt a csoport összes tagjától, és pontba rendezi az adatokat. A MPI_Alltoall a MPI_Allgather függvény kiterjesztése. Minden folyamat külön adatokat küld az egyes fogadóknak. Az i. folyamatból küldött jth blokkot a j folyamat fogadja, és a fogadó puffer i. blokkjába kerül.

Szintaxis

int MPIAPI MPI_Alltoall(
  _In_  void         *sendbuf,
        int          sendcount,
        MPI_Datatype sendtype,
  _Out_ void         *recvbuf,
        int          recvcount,
        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.

    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.

  • sendcount
    A sendbuf paraméterben megadott elemek száma a pufferben. Ha a sendcount értéke nulla, az üzenet adatrésze üres.

  • 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áma és adattípusa a recvcount és a recvtype paraméterekben van megadva.

  • recvcount
    A fogadó puffer elemeinek száma. Ha a szám nulla, az üzenet adatrésze üres.

  • recvtype
    A fogadó puffer elemeinek MPI-adattípusa.

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

Megjegyzések

Minden paraméter jelentős az összes folyamaton. A comm paraméternek minden folyamat esetében azonosnak kell lennie.

A sendcount által megadott típusadminisztnak és egy folyamat sendtype paramétereinek meg kell egyeznie a recvcount által megadott típusadminisztokkal és a recvtype paraméterekkel. 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ípusleképek továbbra is engedélyezettek.

Ha a komm paraméter egy intrakommunikátorra hivatkozik, a hívás MPI_ALLGATHER(...) eredménye olyan, mintha minden folyamat elküldené magát az egyes folyamatoknak, beleértve magát is a használatával MPI_Send(sendbuf + i*sendcount*extent(sendtype), sendcount, sendtype, I, …), és a használatával MPI_Recv(recvbuf + i*recvcount*extent(recvtype), recvcount, recvtype, I, …)fogad minden más folyamatot.

Ha a komm paraméter egy interkommunikátorra hivatkozik, akkor az eredmény olyan, mintha az A csoport minden egyes folyamata üzenetet küld a B csoport minden folyamatának, és fordítva. Az A csoportban az i. folyamat j-pufferénekkonzisztensnek kell lennie a B csoportban lévő j folyamat i-fogadásipufferével, és fordítva.

Az A csoportban lévő folyamatok által küldött elemek számának nem kell megegyeznie a B csoportba tartozó folyamatok által küldött elemek számával. Az adatokat csak egy irányba helyezheti át, ha a fordított irányban adja meg a sendcount == 0 értéket a kommunikációhoz.

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_Allgather

MPI_Send

MPI_Recv