Udostępnij za pośrednictwem


MPI_Alltoallv, funkcja

Zbiera dane z i rozprasza dane do wszystkich członków grupy. Funkcja MPI_Alltoallv zapewnia elastyczność funkcji MPI_Alltoall , umożliwiając różną liczbę danych z każdego procesu.

Składnia

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

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 . Każdy element w buforze odpowiada procesowi w grupie.

    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, sdispls i sendtype są ignorowane. Każdy proces wprowadza dane w odpowiadającym mu elemecie buforu odbioru.

    Dane wysyłane i odbierane muszą mieć taką samą mapę typu, jak określona przez tablicę recvcounts i parametr recvtype . Dane są odczytywane z lokalizacji buforu odbioru określonego przez parametr rdispls .

  • sendcounts [in]
    Liczba elementów danych wysyłanych przez ten proces w buforze określonym w parametrze sendbuf . Jeśli element welemecie sendcount ma wartość zero, część danych komunikatu z tego procesu jest pusta.

  • sdispls [in]
    Lokalizacja względem parametru sendbuf danych dla każdego procesu komunikatora.

    Wpis j określa przesunięcie względem parametru sendbuf , z którego mają zostać pobrane dane wychodzące przeznaczone do przetwarzania j.

  • 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 .

  • recvcounts [in]
    Liczba elementów danych z każdego procesu komunikatora w buforze odbierania.

  • rdispls [in]
    Lokalizacja względem parametru recvbuf danych z każdego procesu komunikatora.

    W tablicach parametrów recvbuf, recvcounts i rdisplsnelement th każdej tablicy odnosi się do danych, które są odbierane z nprocesu komunikatora.

  • recvtype
    Typ danych MPI każdego elementu w buforze.

  • Comm
    Określa 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

Sygnatura typu określona przez parametr sendcount i sendtype dla procesu musi być równa podpisowi typu określonemu przez recvcount i parametrom recvtype procesu odbierania. 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.

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

Jeśli parametr comm odwołuje się do intracommunicator, to jbloku, który jest wysyłany z procesu i jest odbierany przez proces j i jest umieszczony w ibloku buforu odbioru. Te bloki nie muszą mieć tego samego rozmiaru.

Wynik wywołania funkcji MPI_Alltoallv jest taki, jakby każdy proces wysyłał komunikat do każdego innego procesu za pomocą MPI_Send(sendbuf + sdispls[i]*extent(sendtype), sendcounts[i], sendtype, I, …)polecenia , i odebrał komunikat z każdego innego procesu z wywołaniem metody MPI_Recv(recvbuf + rdispls[i]*extent(recvtype), recvcounts[i], recvtype, I, …).

Określenie opcji w miejscu oznacza, że ta sama ilość i typ danych są wysyłane i odbierane między dwoma procesami w grupie komunikatora. Różne pary procesów mogą wymieniać różne ilości danych. Użytkownicy muszą upewnić się, że recvcounts[j] i recvtype w procesie i są zgodne z recvcounts[i] i recvtype w procesie j. Ta wymiana symetryczna może być przydatna w aplikacjach, w których dane do wysłania nie są używane przez proces wysyłania po wywołaniu funkcji MPI_Alltoallv .

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.

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_Alltoall

MPI_Gather

MPI_Scatter

MPI_Send

MPI_Recv