Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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 |