função MPI_Alltoall
Recolhe dados de e dispersão de dados para todos os membros de um grupo. A MPI_Alltoall é uma extensão da função MPI_Allgather . Cada processo envia dados distintos para cada um dos recetores. O bloco jque é enviado do processo i é recebido pelo processo j e é colocado no bloco ida memória intermédia de receção.
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 na memória intermédia são especificados nos parâmetros sendcount e sendtype .Se o parâmetro de comunicação fizer referência a um intracomunicador, pode especificar uma opção no local ao especificar MPI_IN_PLACE em todos os processos. Os parâmetros sendcount e sendtype são ignorados. Cada processo introduz dados no elemento de memória intermédia de receção correspondente. O nth process envia dados para o nth elemento da memória intermédia de receção.
sendcount
O número de elementos na memória intermédia que é especificado no parâmetro sendbuf . Se a conta de envio for zero, a parte de dados da mensagem está vazia.sendtype
O tipo de dados MPI dos elementos na memória intermédia de envio.recvbuf [out]
O ponteiro para uma memória intermédia que contém os dados que são recebidos de cada processo. O número e o tipo de dados dos elementos na memória intermédia são especificados nos parâmetros recvcount e recvtype .conta de recvcount
O número de elementos na memória intermédia de receção. Se a contagem for zero, a parte de dados da mensagem está vazia.recvtype
O tipo de dados MPI dos elementos na memória intermédia de receção.vírgula
O identificador do MPI_Comm communicator.
Valor devolvido
Devolve MPI_SUCCESS com êxito. Caso contrário, o valor devolvido é um código de erro.
Em Fortran, o valor devolvido é 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
Observações
Todos os parâmetros são significativos em todos os processos. O parâmetro de vírgula tem de ser idêntico em todos os processos.
A assinatura de tipo especificada pelos parâmetros sendcount e sendtype para um processo tem de ser igual à assinatura de tipo especificada pela conta de recvcount e os parâmetros de tipo revtype . Por conseguinte, a quantidade de dados enviados tem de ser igual à quantidade de dados recebidos entre qualquer par de processos. Ainda são permitidos mapas de tipos distintos entre o remetente e o recetor.
Se o parâmetro de comm fizer referência a um intracomunicador, o resultado de uma chamada a MPI_ALLGATHER(...)
é como se cada processo executasse um envio para cada processo, incluindo a si próprio, utilizando MPI_Send(sendbuf + i*sendcount*extent(sendtype), sendcount, sendtype, I, …)
e recebendo de todos os outros processos com MPI_Recv(recvbuf + i*recvcount*extent(recvtype), recvcount, recvtype, I, …)
.
Se o parâmetro de comm fizer referência a um intercomunicador, o resultado será como se cada processo no grupo A enviasse uma mensagem para cada processo no grupo B e vice-versa. A memória intermédia de envio jdo processo i no grupo A deve ser consistente com a 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 tem de ser igual ao número de itens enviados pelos processos no grupo B. Em particular, pode mover dados apenas numa direção ao especificar sendcount == 0 para a comunicação na direção inversa.
Requisitos
Produto |
HPC Pack 2012 MS-MPI Redistributable Package, HPC Pack 2008 R2 MS-MPI Redistributable Package, HPC Pack 2008 MS-MPI Redistributable Package ou HPC Pack 2008 Client Utilities |
Cabeçalho |
Mpi.h; Mpif.h |
Biblioteca |
Msmpi.lib |
DLL |
Msmpi.dll |