Udostępnij za pośrednictwem


MPI_Alltoallw, funkcja

Zbiera dane z i rozprasza dane do wszystkich członków grupy. Funkcja MPI_Alltoallw jest najbardziej ogólną formą pełnej wymiany danych w tym interfejsie API. MPI_Alltoallw umożliwia oddzielną specyfikację liczby, przemieszczania i typu danych.

Składnia

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

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ątrzpolecenia, 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 odpowiednim elemecie buforu odbierania.

    Dane wysyłane i odbierane muszą mieć taką samą mapę typu, jak określona przez tablicę recvcounts i parametr recvtype , i jest odczytywana z lokalizacji buforu odbierania 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 w elemecie sendcount ma wartość zero, część danych komunikatu z tego procesu jest pusta.

  • sdispls [in]
    Lokalizacja w bajtach 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.

  • sendtypes [in]
    Typ danych dla każdego z elementów w buforze wysyłania. Wpis j określa typ danych wysyłanych do przetwarzania j w grupie.

  • 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 w bajtach względem parametru recvbuf danych z każdego procesu komunikatora. Wpis i określa przesunięcie względem parametru recvbuf , w którym mają być umieszczane dane przychodzące z procesu i.

    W tablicach parametrów recvbuf, recvcounts i rdisplsnelementu każdej tablicy odnosi się do danych odbieranych z nprocesu komunikatora.

  • recvtypes [in]
    Typ danych każdego elementu w buforze. Wpis i określa typ danych odbieranych z procesu i.

  • Comm
    Uchwyt komunikatora MPI_Comm .

Wartość zwracana

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

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

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

Uwagi

Ważne

Aby zapewnić maksymalną elastyczność, przemieszczanie bloków w buforach wysyłania i odbierania jest określone w bajtach. 

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

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

Sygnatura typu określona przez parametry sendcounts[j] i sendtypes[j]dla procesu musi być równa sygnaturze typu skojarzonej z recvcounts[i ] i recvtypes[i] w procesie j. 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ą a odbiornikiem są nadal dozwolone.

Wynikiem wywołania funkcji MPI_Alltoallw jest to, że każdy proces wysłał komunikat do każdego innego procesu za pomocą polecenia MPI_Send(sendbuf+sdispls[i],sendcounts[i],sendtypes[i] ,i,...)i odebrał komunikat z każdego innego procesu z wywołaniem metody MPI_Recv(recvbuf+rdispls[i],recvcounts[i],recvtypes[i] ,i,...).

Określenie opcji w miejscu wskazuje, ż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ą zapewnić, że recvcounts[j] i recvtype w procesie i pasują do recvcounts[i] i recvtype w procesie j.

Jeśli parametr comm odwołuje się do interpolenicy, 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 buffer of process i in group A powinien być zgodny z ith bufor procesu j w grupie B i na odwrót.

Wymagania

Produkt

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

Nagłówek

Mpi.h; Mpif.h

Biblioteka

Msmpi.lib

DLL

Msmpi.dll

Zobacz też

Funkcje zbiorowe MPI

MPI_Datatype

MPI_Alltoallv

MPI_Gather

MPI_Scatter

MPI_Send

MPI_Recv