MPI_Allgather funkce
Shromáždí data ze všech členů skupiny a odešle je všem členům skupiny. Funkce MPI_Allgather je podobná funkci MPI_Gather s tím rozdílem, že odesílá data do všech procesů, nikoli pouze do kořenového adresáře. Pravidla použití pro MPI_Allgather odpovídají pravidlům pro MPI_Gather.
Syntaxe
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]
Ukazatel na data, která se mají odeslat všem procesům ve skupině. Počet a datový typ prvků ve vyrovnávací paměti jsou zadány v parametrech sendcount a sendtype . Každý prvek ve vyrovnávací paměti odpovídá procesu ve skupině.Pokud parametr comm odkazuje na intrakomunikator, můžete zadat místní možnost zadáním MPI_IN_PLACE ve všech procesech. Parametry sendcount a sendtype jsou ignorovány. Každý proces zadává data do odpovídajícího elementu vyrovnávací paměti pro příjem. N.proces odešle data do nth elementu vyrovnávací paměti pro příjem.
sendcount [in]
Počet prvků ve vyrovnávací paměti zadaný v parametru sendbuf . Pokud je hodnota sendcount nulová, datová část zprávy je prázdná.sendtype [in]
Datový typ MPI prvků ve vyrovnávací paměti pro odesílání.recvbuf [out]
Ukazatel na vyrovnávací paměť, která obsahuje data přijatá z jednotlivých procesů. Počet a datový typ prvků ve vyrovnávací paměti jsou zadané v parametrech recvcount a recvtype .recvcount
Počet prvků v vyrovnávací paměti pro příjem. Pokud je počet nulový, datová část zprávy je prázdná.recvtype
Datový typ MPI prvků v vyrovnávací paměti pro příjem.Komunikace
Popisovač MPI_Comm communicatoru.
Vrácená hodnota
Vrátí MPI_SUCCESS při úspěchu. V opačném případě je návratovou hodnotou kód chyby.
V nástroji Fortran je vrácená hodnota uložena v parametru IERROR .
Fortran
MPI_ALLGATHER(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE, COMM, IERROR)
<type> SENDBUF(*), RECVBUF(*)
INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, COMM, IERROR
Poznámky
Podpis typu přidružený k parametru sendtype v procesu musí být roven podpisu typu, který je přidružený k parametru recvtype v jakémkoli jiném procesu.
Pokud parametr comm odkazuje na intrakomunikator, výsledek volání MPI_ALLGATHER(...)
je, jako by všechny procesy spustily n volání MPI_Gather(sendbuf,sendcount,sendtype,recvbuf,recvcount,recvtype,root,comm)
pro root = 0 , ..., n-1
.
Pokud parametr comm odkazuje na interkomunikátor, pak každý proces jedné skupiny, například skupina A, přispívá počtem datových položek, které jsou zadány v parametru sendcount . Tato data jsou zřetězena a výsledek je uložen v každém procesu ve druhé skupině B. Naopak zřetězení dat procesů ve skupině B je uloženo v každém procesu ve skupině A. Parametry vyrovnávací paměti pro odesílání ve skupině A musí být konzistentní s parametry vyrovnávací paměti pro příjem ve skupině B a naopak.
Počet položek odeslaných procesy ve skupině A se nemusí rovnat počtu položek odesílaných procesy ve skupině B. Konkrétně můžete přesunout data pouze v jednom směru zadáním sendcount == 0 pro komunikaci v opačném směru.
Požadavky
Produkt |
HPC Pack 2012 MS-MPI Redistributable Package, HPC Pack 2008 R2 MS-MPI Redistributable Package, HPC Pack 2008 MS-MPI Redistributable Package nebo HPC Pack 2008 Client Utilities |
Hlavička |
Mpi.h; Mpif.h |
Knihovna |
Msmpi.lib |
DLL |
Msmpi.dll |