função MPI_Gather
Recolhe dados de todos os membros de um grupo para um membro.
Sintaxe
int MPIAPI MPI_Gather(
_In_ void *sendbuf,
int sendcount,
MPI_Datatype sendtype,
_Out_opt_ void *recvbuf,
int recvcount,
MPI_Datatype recvtype,
int root,
MPI_Comm comm
);
Parâmetros
sendbuf [in]
O ponteiro para uma memória intermédia que contém os dados a serem enviados para o processo de raiz.Se o parâmetro de comunicação fizer referência a um intracomunário, 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 elemento nda memória intermédia de receção. Presume-se que os dados enviados pelo processo de raiz estão no local correto na memória intermédia de receção.
sendcount
O número de elementos na memória intermédia de envio. Se a conta de envio for zero, a parte de dados da mensagem estará vazia.tipo de mensagem
O tipo de dados de cada elemento na memória intermédia.recvbuf [fora, opcional]
O ponteiro para uma memória intermédia no processo de raiz que contém os dados recebidos de cada processo. Inclui dados que são enviados pelo processo de raiz. Este parâmetro é significativo apenas no processo de raiz. O parâmetro recvbuf é ignorado para todos os processos não raiz.recvcount
O número de elementos que são recebidos de cada processo. Este número não é o número total de itens na memória intermédia. Se a contagem for zero, a parte de dados da mensagem estará vazia. Este parâmetro é significativo apenas no processo de raiz.recvtype
O tipo de dados MPI de cada elemento na memória intermédia. Este parâmetro é significativo apenas no processo de raiz.raiz
A classificação do processo de receção no comunicador especificado.vírgula
O MPI_Comm identificador do comunicador.
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_GATHER(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE, ROOT, COMM, IERROR)
<type> SENDBUF(*), RECVBUF(*)
INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, ROOT, COMM, IERROR
Observações
Todos os parâmetros da função são significativos no processo de raiz, apenas o sendbuf, sendcount, sendtype, root e comm são significativos nos outros processos. Os parâmetros de raiz e de comm têm de ser idênticos em todos os processos.
Geralmente, os tipos de dados derivados são permitidos para os parâmetros sendtype e recvtype . A assinatura de tipo especificada pelos parâmetros sendtype e recvtype em cada processo tem de ser igual à assinatura de tipo dos parâmetros de contagem de recvcount e sendcount no processo de raiz. A quantidade de dados que é enviada tem de ser igual à quantidade de dados que é recebida entre o processo de raiz e cada processo individual. Ainda são permitidos mapas de tipos distintos entre o remetente e o recetor.
A especificação das contagens e dos tipos não deve fazer com que qualquer localização na raiz seja escrita mais do que uma vez. Tal chamada é errónea.
Se o parâmetro de comunicação fizer referência a um intracomunário, todos os processos enviam o conteúdo da memória intermédia de envio para o processo de raiz. O processo de raiz recebe as mensagens e armazena-as por ordem de classificação. O resultado é como se cada um dos n processos no grupo executasse uma chamada para MPI_Send(sendbuf, sendcount, sendtype, root, …)
; e a raiz tivesse executado n chamadas para MPI_Recv(recvbuf + i*recvcount*extent(recvtype), recvcount, recvtype, i, …)
. O valor de extent(recvtype)
é obtido com a função MPI_Type_get_extent . Uma descrição alternativa da função é que as mensagens n enviadas pelos processos no grupo são concatenadas por ordem de classificação e a mensagem resultante é recebida pela raiz como se fosse uma chamada para MPI_RECV(recvbuf, recvcountn, recvtype, ...)
. A memória intermédia de receção é ignorada para todos os processos não raiz.
Se o parâmetro de comunicação fizer referência a um intercomunicador, a chamada envolve todos os processos no intercomunicador, mas com um grupo, grupo A, que define o processo de raiz. Todos os processos no outro grupo, grupo B, definem o mesmo valor no parâmetro raiz , ou seja, a classificação do processo de raiz no grupo A. O processo de raiz define o valor MPI_ROOT no parâmetro raiz . Todos os outros processos no grupo A definem o valor MPI_PROC_NULL no parâmetro raiz . Os dados são transmitidos do processo de raiz para todos os processos no grupo B. Os parâmetros de memória intermédia dos processos no grupo B têm de ser consistentes com o parâmetro de memória intermédia do processo de raiz.
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 |