Compartilhar via


função MPI_Alltoall

Coleta dados de e dispersão de dados para todos os membros de um grupo. O MPI_Alltoall é uma extensão da função MPI_Allgather . Cada processo envia dados distintos para cada um dos receptores. O bloco jth enviado do processo i é recebido pelo processo j e é colocado no i th bloco do buffer de recebimento.

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 no buffer são especificados nos parâmetros sendcount e sendtype .

    Se o parâmetro comm fizer referência a 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
    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
    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_ALLTOALL(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE,
                COMM, IERROR)
        <type> SENDBUF(*), R.ECVBUF(*)
        INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, COMM, IERROR

Comentários

Todos os parâmetros são significativos em todos os processos. O parâmetro comm deve ser idêntico em todos os processos.

A assinatura de tipo especificada pelos parâmetros sendcount e sendtype para um processo deve ser igual à assinatura de tipo especificada pelos parâmetros recvcount e recvtype . Portanto, a quantidade de dados enviados deve ser igual à quantidade de dados recebidos entre qualquer par de processos. Mapas de tipo distintos entre remetente e receptor ainda são permitidos.

Se o parâmetro comm referenciar um intracomunicador, o resultado de uma chamada para MPI_ALLGATHER(...) será como se cada processo executasse um envio para cada processo, incluindo a si mesmo usando MPI_Send(sendbuf + i*sendcount*extent(sendtype), sendcount, sendtype, I, …)e recebendo de todos os outros processos usando MPI_Recv(recvbuf + i*recvcount*extent(recvtype), recvcount, recvtype, I, …).

Se o parâmetro comm referenciar um intercomunicador, o resultado será como se cada processo no grupo A enviasse uma mensagem para cada processo no grupo B e vice-versa. O jth send buffer do processo i no grupo A deve ser consistente com o 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 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

MPI_Send

MPI_Recv