Função MPI_Allgather
Coleta dados de todos os membros de um grupo e envia os dados para todos os membros do grupo. A função MPI_Allgather é semelhante à função MPI_Gather , exceto que ela envia os dados para todos os processos em vez de apenas para a raiz. As regras de uso para MPI_Allgather correspondem às regras de MPI_Gather.
Sintaxe
int MPIAPI MPI_Allgather(
_In_ void *sendbuf,
_In_ int sendcount,
_In_ 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 . Cada elemento no buffer corresponde a um processo no grupo.Se o parâmetro comm referenciar 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 [in]
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 [in]
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_ALLGATHER(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE, COMM, IERROR)
<type> SENDBUF(*), RECVBUF(*)
INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, COMM, IERROR
Comentários
A assinatura de tipo associada ao parâmetro sendtype em um processo deve ser igual à assinatura de tipo associada ao parâmetro recvtype em qualquer outro processo.
Se o parâmetro comm fizer referência a um intracommunicator, o resultado de uma chamada para MPI_ALLGATHER(...)
será como se todos os processos executassem n chamadas para MPI_Gather(sendbuf,sendcount,sendtype,recvbuf,recvcount,recvtype,root,comm)
para root = 0 , ..., n-1
.
Se o parâmetro comm fizer referência a um intercomunicador, cada processo de um grupo, por exemplo, o grupo A, contribuirá com o número de itens de dados especificados no parâmetro sendcount . Esses dados são concatenados e o resultado é armazenado em cada processo no outro grupo, o grupo B. Por outro lado, a concatenação dos dados dos processos no grupo B é armazenada em cada processo no grupo A. Os parâmetros de buffer de envio no grupo A devem ser consistentes com os parâmetros de buffer de recebimento no grupo B e vice-versa.
O número de itens, que são 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 |