Compartilhar via


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 processo envia dados para o 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

Confira também

Funções coletivas de MPI

MPI_Datatype

MPI_Allgather