MPI_Alltoall funkce
Shromažďuje data ze všech členů skupiny a rozptyluje je do všech členů skupiny. MPI_Alltoall je rozšířením funkce MPI_Allgather. Každý proces odesílá každému z příjemců samostatná data. J thblok odeslaný z procesu i je přijat procesem j a je umístěn v itém bloku příjmové vyrovnávací paměti.
Syntaxe
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]
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 uvedeny v parametrech sendcount a sendtype .Pokud parametr comm odkazuje na intracommunicator, můžete zadat místní možnost zadáním MPI_IN_PLACE ve všech procesech. Parametry sendcount a sendtype se ignorují. Každý proces zadává data do odpovídajícího prvku vyrovnávací paměti pro příjem. N. proces odešle data do n. prvku vyrovnávací paměti pro příjem.
počet odeslání
Počet prvků ve vyrovnávací paměti, který je zadán v parametru sendbuf . Pokud je hodnota sendcount nulová, je datová část zprávy prázdná.typ odeslání
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 uvedeny v parametrech recvcount a recvtype .recvcount
Počet prvků ve vyrovnávací paměti pro příjem. Pokud je počet nula, datová část zprávy je prázdná.recvtype
Datový typ MPI prvků v vyrovnávací paměti pro příjem.Komunikace
Popisovač MPI_Comm komunikátoru.
Vrácená hodnota
Vrátí MPI_SUCCESS při úspěchu. V opačném případě je návratovou hodnotou kód chyby.
Ve Fortranu je vrácená hodnota uložena v parametru IERROR .
Fortran
MPI_ALLTOALL(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE,
COMM, IERROR)
<type> SENDBUF(*), R.ECVBUF(*)
INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, COMM, IERROR
Poznámky
Všechny parametry jsou důležité pro všechny procesy. Parametr comm musí být ve všech procesech identický.
Podpis typu určený parametrem sendcount a sendtype pro proces se musí rovnat podpisu typu určenému parametry recvcount a recvtype . Množství odeslaných dat se proto musí rovnat množství dat přijatých mezi libovolnými dvojicemi procesů. Mapování různých typů mezi odesílatelem a příjemcem je stále povolené.
Pokud parametr comm odkazuje na intracommunicator, výsledek volání MPI_ALLGATHER(...)
je, jako by každý proces spustil odeslání do každého procesu, včetně sebe pomocí MPI_Send(sendbuf + i*sendcount*extent(sendtype), sendcount, sendtype, I, …)
, a příjem z každého druhého procesu pomocí .MPI_Recv(recvbuf + i*recvcount*extent(recvtype), recvcount, recvtype, I, …)
Pokud parametr comm odkazuje na interkomunikator, výsledek je, jako kdyby každý proces ve skupině A odeslal zprávu každému procesu ve skupině B a naopak. Vyrovnávací paměť proodesílání procesu i ve skupině A by měla být konzistentní s vyrovnávací pamětí ipříjmu procesu j ve skupině B a naopak.
Počet položek odeslaných procesy ve skupině A se nemusí rovnat počtu položek odeslaných procesy ve skupině B. Konkrétně můžete data přesunout pouze v jednom směru zadáním hodnoty 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; Soubor Mpif.h |
Knihovna |
Msmpi.lib |
DLL |
Msmpi.dll |