função MPI_Alltoall
Coleta dados de e dispersão de dados para todos os membros de um grupo. O MPI_Alltoall é uma extensão da função MPI_Allgather . Cada processo envia dados distintos para cada um dos receptores. O bloco jth enviado do processo i é recebido pelo processo j e é colocado no i th bloco do buffer de recebimento.
Sintaxe
int MPIAPI MPI_Alltoall(
_In_ void *sendbuf,
int sendcount,
MPI_Datatype sendtype,
_Out_ void *recvbuf,
int recvcount,
MPI_Datatype recvtype,
MPI_Comm comm
);
Parâmetros
sendbuf [in]
O ponteiro para os dados a serem enviados para todos os processos no grupo. O número e o tipo de dados dos elementos no buffer são especificados nos parâmetros sendcount e sendtype .Se o parâmetro comm fizer referência a um intracomunicador, você poderá especificar uma opção in-loco especificando MPI_IN_PLACE em todos os processos. Os parâmetros sendcount e sendtype são ignorados. Cada processo insere dados no elemento de buffer de recebimento correspondente. O nºprocesso envia dados para o nºelemento do buffer de recebimento.
sendcount
O número de elementos no buffer especificado no parâmetro sendbuf . Se sendcount for zero, a parte de dados da mensagem estará vazia.sendtype
O tipo de dados MPI dos elementos no buffer de envio.recvbuf [out]
O ponteiro para um buffer que contém os dados recebidos de cada processo. O número e o tipo de dados dos elementos no buffer são especificados nos parâmetros recvcount e recvtype .recvcount
O número de elementos no buffer de recebimento. Se a contagem for zero, a parte de dados da mensagem estará vazia.recvtype
O tipo de dados MPI dos elementos no buffer de recebimento.comm
O MPI_Comm identificador do comunicador.
Retornar valor
Retorna MPI_SUCCESS em caso de êxito. Caso contrário, o valor retornado será um código de erro.
Em Fortran, o valor retornado é armazenado no parâmetro IERROR .
Fortran
MPI_ALLTOALL(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE,
COMM, IERROR)
<type> SENDBUF(*), R.ECVBUF(*)
INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, COMM, IERROR
Comentários
Todos os parâmetros são significativos em todos os processos. O parâmetro comm deve ser idêntico em todos os processos.
A assinatura de tipo especificada pelos parâmetros sendcount e sendtype para um processo deve ser igual à assinatura de tipo especificada pelos parâmetros recvcount e recvtype . Portanto, a quantidade de dados enviados deve ser igual à quantidade de dados recebidos entre qualquer par de processos. Mapas de tipo distintos entre remetente e receptor ainda são permitidos.
Se o parâmetro comm referenciar um intracomunicador, o resultado de uma chamada para MPI_ALLGATHER(...)
será como se cada processo executasse um envio para cada processo, incluindo a si mesmo usando MPI_Send(sendbuf + i*sendcount*extent(sendtype), sendcount, sendtype, I, …)
e recebendo de todos os outros processos usando MPI_Recv(recvbuf + i*recvcount*extent(recvtype), recvcount, recvtype, I, …)
.
Se o parâmetro comm referenciar um intercomunicador, o resultado será como se cada processo no grupo A enviasse uma mensagem para cada processo no grupo B e vice-versa. O jth send buffer do processo i no grupo A deve ser consistente com o ith receive buffer do processo j no grupo B e vice-versa.
O número de itens enviados por processos no grupo A não precisa ser igual ao número de itens enviados por processos no grupo B. Em particular, você pode mover dados em apenas uma direção especificando sendcount == 0 para a comunicação na direção inversa.
Requisitos
Produto |
Pacote Redistribuível do HPC Pack 2012 MS-MPI, Pacote Redistribuível HPC Pack 2008 R2 MS-MPI, Pacote Redistribuível do HPC Pack 2008 MS-MPI ou Utilitários de Cliente HPC Pack 2008 |
parâmetro |
Mpi.h; Mpif.h |
Biblioteca |
Msmpi.lib |
DLL |
Msmpi.dll |