MPI_Alltoallv funkce
Shromažďuje data z a rozptyluje data pro všechny členy skupiny. Funkce MPI_Alltoallv přidává funkci MPI_Alltoall flexibilitu tím, že umožňuje různý počet dat z jednotlivých procesů.
Syntaxe
int MPIAPI MPI_Alltoallv(
_In_ void *sendbuf,
_In_ int *sendcounts,
_In_ int *sdispls,
MPI_Datatype sendtype,
_Out_ void *recvbuf,
_In_ int *recvcounts,
_In_ int *rdispls,
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, sdispls a sendtype jsou ignorovány. Každý proces zadává data do odpovídajícího elementu vyrovnávací paměti pro příjem.
Odesílaná a přijatá data musí mít stejné mapování typu, jaké určuje pole recvcounts a parametr recvtype . Data se načítají z umístění vyrovnávací paměti pro příjem, která je určena parametrem rdispls .
sendcounts [in]
Počet datových prvků, které tento proces odesílá ve vyrovnávací paměti zadané v parametru sendbuf . Pokud je prvek vsendcount nula, datová část zprávy z tohoto procesu je prázdná.sdispls [in]
Umístění dat pro každý proces komunikátoru vzhledem k parametru sendbuf .Položka j určuje posunutí vzhledem k parametru sendbuf , ze kterého se mají převzít odchozí data určená pro proces j.
sendtype
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 .recvcounts [in]
Počet datových prvků z jednotlivých procesů komunikátoru v vyrovnávací paměti pro příjem.rdispls [v]
Umístění dat z jednotlivých procesů komunikátoru vzhledem k parametru recvbuf .V polích parametrů recvbuf, recvcounts a rdispls odkazuje nth prvek každého pole na data, která jsou přijata z ntého procesu communicatoru.
recvtype
Datový typ MPI každého prvku ve vyrovnávací paměti.Komunikace
Určuje 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_ALLTOALL(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE,
COMM, IERROR)
<type> SENDBUF(*), R.ECVBUF(*)
INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, COMM, IERROR
Poznámky
Podpis typu určený parametrem sendcount a sendtype pro proces se musí rovnat podpisu typu určenému recvcount a parametrům recvtype přijímajícího procesu. Proto se množství odeslaných dat musí rovnat množství dat přijatých mezi libovolnými páry procesů. Mapování různých typů mezi odesílatelem a příjemcem jsou stále povolená.
Všechny parametry jsou důležité pro všechny procesy. Parametr comm musí být ve všech procesech stejný.
Pokud parametr comm odkazuje na intrakomunikator, pak jth blok, který je odeslán z procesu i je přijat procesem j a je umístěn v ith bloku vyrovnávací paměti pro příjem. Tyto bloky nemusí mít stejnou velikost.
Výsledek volání funkce MPI_Alltoallv je, jako by každý proces odeslal zprávu do každého druhého procesu s MPI_Send(sendbuf + sdispls[i]*extent(sendtype), sendcounts[i], sendtype, I, …)
a přijal zprávu z každého druhého procesu s voláním MPI_Recv(recvbuf + rdispls[i]*extent(recvtype), recvcounts[i], recvtype, I, …)
.
Určení místní možnosti označuje, že se mezi libovolnými dvěma procesy ve skupině komunikátoru odesílá a přijímá stejný objem a typ dat. Různé páry procesů můžou vyměňovat různá množství dat. Uživatelé musí zajistit, aby recvcounts[j] a recvtype u procesu iodpovídaly recvcounts[i] a recvtype v procesu j. Tato symetrická výměna může být užitečná v aplikacích, kde odesílaná data nejsou používána procesem odesílání po volání funkce MPI_Alltoallv .
Pokud parametr comm odkazuje na interkomunikátor, výsledek je, jako by každý proces ve skupině A odeslal zprávu každému procesu ve skupině B a naopak. Vyrovnávací paměť jth send 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ž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 |