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 |