Compartilhar via


função MPI_Scatter

Dispersa dados de um membro em todos os membros de um grupo. A função MPI_Scatter executa o inverso da operação executada pela função MPI_Gather .

Sintaxe

int MPIAPI MPI_Scatter(
  _In_  void         *sendbuf,
        int          sendcount,
        MPI_Datatype sendtype,
  _Out_ void         *recvbuf,
        int          recvcount,
        MPI_Datatype recvtype,
        int          root,
        MPI_Comm     comm
);

Parâmetros

  • sendbuf [in]
    O identificador para um buffer que contém os dados a serem enviados pelo processo raiz.

    O parâmetro sendbuf é ignorado para todos os processos não raiz.

    Se o parâmetro comm fizer referência a um intracomunhador, você poderá especificar uma opção in-loco especificando MPI_IN_PLACE no processo raiz. Os parâmetros recvcount e recvtype são ignorados. O vetor disperso ainda é considerado para conter n segmentos, em que n é o tamanho do grupo; o segmento que corresponde ao processo raiz não é movido.

  • sendcount
    O número de elementos no buffer de envio. Se sendcount for zero, a parte de dados da mensagem estará vazia.

    O parâmetro sendcount é ignorado para todos os processos não raiz.

  • sendtype
    O tipo de dados de cada elemento no buffer.

    O parâmetro sendcount é ignorado para todos os processos não raiz.

  • recvbuf [out]
    O identificador para um buffer que contém os dados recebidos em 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 dos elementos no buffer de recebimento.

  • root
    A classificação do processo de envio dentro do comunicador especificado.

  • comm
    O identificador MPI_Comm comunicador.

Retornar valor

Retorna MPI_SUCCESS com êxito. Caso contrário, o valor retornado será um código de erro.

No Fortran, o valor retornado é armazenado no parâmetro IERROR .

Fortran

    MPI_SCATTER(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE, ROOT, COMM, IERROR)
        <type> SENDBUF(*), RECVBUF(*)
        INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, ROOT, COMM, IERROR

Comentários

O efeito da função MPI_Scatter é como se o processo raiz enviasse uma mensagem usando a função MPI_Send . Essa mensagem é dividida em n segmentos iguais, um para cada membro do grupo. O segmento ith é enviado para o processo ith no grupo.

Se comm for um intracommunicator, o resultado será como se a raiz executada n enviasse operações MPI_Send(sendbuf + i*sendcount*extent(sendtype), sendcount, sendtype, I, …); e cada processo executasse um recebimento, MPI_Recv(recvbuf, recvcount, recvtype, i,…).

A assinatura de tipo especificada pelos parâmetros sendcount e sendtype para o processo raiz deve ser igual à assinatura de tipo especificada pelos parâmetros recvcount e recvtype para todos os processos. 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.

Todos os parâmetros de função são significativos no processo raiz, somente os parâmetros recvbuf, recvcount, recvtype, root e comm são significativos nos outros processos. Os parâmetros raiz e comm devem ser idênticos em todos os processos.

A especificação de contagens e tipos não deve fazer com que qualquer local na raiz seja lido mais de uma vez.

Se o parâmetro comm fizer referência a um intercomunhador, a chamada envolverá todos os processos no intercomuniciador, mas com um grupo, o grupo A, que define o processo raiz. Todos os processos no outro grupo, grupo B, definem o mesmo valor no parâmetro raiz , ou seja, a classificação do processo raiz no grupo A. O processo 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 raiz para todos os processos no grupo B. Os parâmetros de buffer dos processos no grupo B devem ser consistentes com o parâmetro buffer do processo raiz.

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_Gather

MPI_Gatherv

MPI_Scatterv