função MPI_Alltoallv
Recolhe dados de e dispersão de dados para todos os membros de um grupo. A função MPI_Alltoallv adiciona flexibilidade à função MPI_Alltoall ao permitir uma contagem variada de dados de cada processo.
Sintaxe
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
);
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 . Cada elemento na memória intermédia corresponde a um processo no grupo.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, sdispls e sendtype são ignorados. Cada processo introduz dados no elemento de memória intermédia de receção correspondente.
Os dados enviados e recebidos têm de ter o mesmo tipo de mapa especificado pela matriz de recvcounts e pelo parâmetro recvtype . Os dados são lidos a partir das localizações da memória intermédia de receção especificada pelo parâmetro rdispls .
sendcounts [in]
O número de elementos de dados que este processo envia na memória intermédia especificada no parâmetro sendbuf . Se um elemento naconta de envio for zero, a parte dos dados da mensagem desse processo está vazia.sdispls [in]
A localização, relativa ao parâmetro sendbuf , dos dados de cada processo do communicator.A entrada j especifica o deslocamento relativo ao parâmetro sendbuf a partir do qual os dados de saída estão destinados ao processo j.
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 .recvcounts [in]
O número de elementos de dados de cada processo de comunicador na memória intermédia de receção.rdispls [in]
A localização, relativa ao parâmetro recvbuf , dos dados de cada processo do communicator.Nas matrizes de parâmetros recvbuf, recvcounts e rdispls , o n.ºelemento de cada matriz refere-se aos dados que são recebidos do processo do comunicador n.
recvtype
O tipo de dados MPI de cada elemento na memória intermédia.vírgula
Especifica 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
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 do processo de receção. 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.
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.
Se o parâmetro de comm fizer referência a um intracomunicador, o bloco jque é enviado do processo i é recebido pelo processo j e é colocado no bloco ida memória intermédia de receção. Estes blocos não têm de ter todos o mesmo tamanho.
O resultado da chamada da função MPI_Alltoallv é como se cada processo enviasse uma mensagem para todos os outros processos com , MPI_Send(sendbuf + sdispls[i]*extent(sendtype), sendcounts[i], sendtype, I, …)
e recebesse uma mensagem de todos os outros processos com uma chamada para MPI_Recv(recvbuf + rdispls[i]*extent(recvtype), recvcounts[i], recvtype, I, …)
.
Especificar a opção no local indica que a mesma quantidade e tipo de dados são enviados e recebidos entre dois processos no grupo do comunicador. Diferentes pares de processos podem trocar diferentes quantidades de dados. Os utilizadores têm de garantir que as recvcounts[j] e o revtype no processo i correspondem a recvcounts[i] e revtype no processo j. Esta troca simétrica pode ser útil em aplicações para as quais os dados a enviar não são utilizados pelo processo de envio após a chamada da função MPI_Alltoallv .
Se o parâmetro de comunicação 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.
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 |