Udostępnij za pomocą


MPI_Alltoall, funkcja

Zbiera dane z i rozprasza dane do wszystkich członków grupy. MPI_Alltoall jest rozszerzeniem funkcji MPI_Allgather. Każdy proces wysyła odrębne dane do każdego z odbiorników. Blok j, który jest wysyłany z procesu i jest odbierany przez proces j i jest umieszczany w ibloku buforu odbioru.

Składnia

int MPIAPI MPI_Alltoall(
  _In_  void         *sendbuf,
        int          sendcount,
        MPI_Datatype sendtype,
  _Out_ void         *recvbuf,
        int          recvcount,
        MPI_Datatype recvtype,
        MPI_Comm     comm
);

Parametry

  • sendbuf [in]
    Wskaźnik do danych, które mają być wysyłane do wszystkich procesów w grupie. Liczba i typ danych elementów w buforze są określone w parametrach sendcount i sendtype .

    Jeśli parametr comm odwołuje się do wewnątrzkomunikatora, można określić opcję w miejscu, określając MPI_IN_PLACE we wszystkich procesach. Parametry sendcount i sendtype są ignorowane. Każdy proces wprowadza dane w odpowiadającym mu elemecie buforu odbioru. Nproces wysyła dane do nelement buforu odbioru.

  • sendcount
    Liczba elementów w buforze określonym w parametrze sendbuf . Jeśli parametr sendcount ma wartość zero, część danych wiadomości jest pusta.

  • sendtype
    Typ danych MPI elementów w buforze wysyłania.

  • recvbuf [out]
    Wskaźnik do buforu zawierającego dane odbierane z każdego procesu. Liczba i typ danych elementów w buforze są określone w parametrach recvcount i recvtype .

  • recvcount
    Liczba elementów w buforze odbioru. Jeśli liczba jest równa zero, część danych komunikatu jest pusta.

  • recvtype
    Typ danych MPI elementów w buforze odbioru.

  • Comm
    Uchwyt komunikatora MPI_Comm .

Wartość zwracana

Zwraca MPI_SUCCESS powodzenia. W przeciwnym razie wartość zwracana jest kodem błędu.

W fortran wartość zwracana jest przechowywana w parametrze IERROR .

Fortran

    MPI_ALLTOALL(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE,
                COMM, IERROR)
        <type> SENDBUF(*), R.ECVBUF(*)
        INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, COMM, IERROR

Uwagi

Wszystkie parametry są istotne we wszystkich procesach. Parametr comm musi być identyczny we wszystkich procesach.

Sygnatura typu określona przez parametr sendcount i sendtype dla procesu musi być równa podpisowi typu określonemu przez parametry recvcount i recvtype . W związku z tym ilość wysyłanych danych musi być równa ilości danych odbieranych między dowolną parą procesów. Różne mapy typów między nadawcą i odbiornikiem są nadal dozwolone.

Jeśli parametr comm odwołuje się do intracommunicator, wynik wywołania do MPI_ALLGATHER(...) jest tak, jakby każdy proces wykonał wysyłanie do każdego procesu, w tym się przy użyciu metody MPI_Send(sendbuf + i*sendcount*extent(sendtype), sendcount, sendtype, I, …), i odbieranie z każdego innego procesu przy użyciu polecenia MPI_Recv(recvbuf + i*recvcount*extent(recvtype), recvcount, recvtype, I, …).

Jeśli parametr comm odwołuje się do intercommunicator, wynik jest taki, jakby każdy proces w grupie A wysyła komunikat do każdego procesu w grupie B i na odwrót. Jth send bufor procesu i w grupie A powinien być zgodny z ith bufor odbierania procesu j w grupie B i odwrotnie.

Liczba elementów wysyłanych przez procesy w grupie A nie musi być równa liczbie elementów wysyłanych przez procesy w grupie B. W szczególności dane można przenosić tylko w jednym kierunku, określając sendcount == 0 dla komunikacji w odwrotnym kierunku.

Wymagania

Produkt

Pakiet redystrybucyjny PROGRAMU HPC Pack 2012 MS-MPI, pakiet redystrybucyjny HPC Pack 2008 R2 MS-MPI, pakiet redystrybucyjny PAKIETU HPC Pack 2008 MS-MPI lub narzędzia klienckie PAKIETU HPC Pack 2008

Nagłówek

Mpi.h; Mpif.h

Biblioteka

Msmpi.lib

DLL

Msmpi.dll

Zobacz też

Funkcje zbiorowe MPI

MPI_Datatype

MPI_Allgather

MPI_Send

MPI_Recv