Partilhar via


função MPI_Alltoall

Recolhe dados de e dispersão de dados para todos os membros de um grupo. A MPI_Alltoall é uma extensão da função MPI_Allgather . Cada processo envia dados distintos para cada um dos recetores. O bloco jque é enviado do processo i é recebido pelo processo j e é colocado no bloco ida memória intermédia de receção.

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 na memória intermédia são especificados nos parâmetros sendcount e sendtype .

    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 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 nth elemento da memória intermédia de receção.

  • sendcount
    O número de elementos na memória intermédia que é especificado no parâmetro sendbuf . Se a conta de envio for zero, a parte de dados da mensagem está vazia.

  • 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 .

  • conta de recvcount
    O número de elementos na memória intermédia de receção. Se a contagem for zero, a parte de dados da mensagem está vazia.

  • recvtype
    O tipo de dados MPI dos elementos na memória intermédia de receção.

  • vírgula
    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

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.

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 . 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.

Se o parâmetro de comm fizer referência a um intracomunicador, o resultado de uma chamada a MPI_ALLGATHER(...) é como se cada processo executasse um envio para cada processo, incluindo a si próprio, utilizando MPI_Send(sendbuf + i*sendcount*extent(sendtype), sendcount, sendtype, I, …)e recebendo de todos os outros processos com MPI_Recv(recvbuf + i*recvcount*extent(recvtype), recvcount, recvtype, I, …).

Se o parâmetro de comm 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.

O número de itens enviados por processos no grupo A não tem de ser igual ao número de itens enviados pelos processos no grupo B. Em particular, pode mover dados apenas numa direção ao especificar sendcount == 0 para a comunicação na direção inversa.

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

Ver também

Funções Coletivas de MPI

MPI_Datatype

MPI_Allgather

MPI_Send

MPI_Recv