Partilhar 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 uma memória intermédia que contém os dados a serem enviados pelo processo de raiz.

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

    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 no processo de raiz. Os parâmetros recvcount e recvtype são ignorados. O vetor disperso ainda é considerado como contendo n segmentos, em que n é o tamanho do grupo; o segmento que corresponde ao processo de raiz não é movido.

  • 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 está vazia.

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

  • sendtype
    O tipo de dados de cada elemento na memória intermédia.

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

  • recvbuf [out]
    O identificador para uma memória intermédia que contém os dados que são recebidos em 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 dos elementos na memória intermédia de receção.

  • raiz
    A classificação do processo de envio no comunicador especificado.

  • 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_SCATTER(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE, ROOT, COMM, IERROR)
        <type> SENDBUF(*), RECVBUF(*)
        INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, ROOT, COMM, IERROR

Observações

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

Se o comm for um intracomunicador, o resultado é como se a raiz executasse n operações MPI_Send(sendbuf + i*sendcount*extent(sendtype), sendcount, sendtype, I, …)de envio; e cada processo executasse uma receção, MPI_Recv(recvbuf, recvcount, recvtype, i,…).

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

Todos os parâmetros da função são significativos no processo de raiz, apenas os parâmetros recvbuf, recvcount, recvtype, 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.

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

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

Ver também

Funções Coletivas de MPI

MPI_Datatype

MPI_Gather

MPI_Gatherv

MPI_Scatterv