MPI_Allgather, funkcja
Zbiera dane ze wszystkich członków grupy i wysyła dane do wszystkich członków grupy. Funkcja MPI_Allgather jest podobna do funkcji MPI_Gather , z tą różnicą, że wysyła dane do wszystkich procesów zamiast tylko do katalogu głównego. Reguły użycia MPI_Allgather odpowiadają regułom MPI_Gather.
Składnia
int MPIAPI MPI_Allgather(
_In_ void *sendbuf,
_In_ int sendcount,
_In_ 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 . 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 i sendtype są ignorowane. Każdy proces wprowadza dane w odpowiednim elemecie buforu odbierania. Nproces wysyła dane do nelementu buforu odbierania.
sendcount [in]
Liczba elementów w buforze określonym w parametrze sendbuf . Jeśli pole sendcount ma wartość zero, część danych komunikatu jest pusta.sendtype [in]
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 odbierania. Jeśli liczba jest równa zero, część danych komunikatu jest pusta.recvtype
Typ danych MPI elementów w buforze odbierania.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_ALLGATHER(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE, COMM, IERROR)
<type> SENDBUF(*), RECVBUF(*)
INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, COMM, IERROR
Uwagi
Sygnatura typu skojarzona z parametrem sendtype w procesie musi być równa sygnaturze typu skojarzonej z parametrem recvtype w każdym innym procesie.
Jeśli parametr comm odwołuje się do wewnątrzkomunikatora, wynik wywołania jest MPI_ALLGATHER(...)
taki, jakby wszystkie procesy wykonały n wywołań dla MPI_Gather(sendbuf,sendcount,sendtype,recvbuf,recvcount,recvtype,root,comm)
root = 0 , ..., n-1
.
Jeśli parametr comm odwołuje się do międzypolecenia, każdy proces jednej grupy, na przykład grupy A, współtworzy liczbę elementów danych określonych w parametrze sendcount . Te dane są łączone, a wynik jest przechowywany w każdym procesie w drugiej grupie B. Z drugiej strony łączenie danych procesów w grupie B jest przechowywane w każdym procesie w grupie A. Parametry buforu wysyłania w grupie A muszą być spójne z parametrami buforu odbierania w grupie B i na odwrót.
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 można przenosić dane tylko w jednym kierunku, określając wartość sendcount == 0 dla komunikacji w odwrotnym kierunku.
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 |