Partilhar via


função MPI_Scatterv

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

Sintaxe

int MPIAPI MPI_Scatterv(
  _In_  void         *sendbuf,
  _In_  int          *sendcounts,
  _In_  int          *displs,
        MPI_Datatype sendtype,
  _Out_ void         *recvbuf,
        int          recvcount,
        MPI_Datatype recvtype,
        int          root,
        MPI_Comm     comm
);

Parâmetros

  • sendbuf [in]
    O ponteiro 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.

  • sendcounts [in]
    O número de elementos a enviar para cada processo. Se sendcount[i] for zero, a parte de dados da mensagem desse processo está vazia.

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

  • desativa [in]
    As localizações dos dados a enviar para cada processo de comunicador. Cada localização na matriz é relativa ao elemento correspondente da matriz sendbuf .

    No sendbuf, sendcounts e desativa as matrizes de parâmetros, o n.ºelemento de cada matriz refere-se aos dados a serem enviados para o processo do comunicador n.

    Este parâmetro é significativo apenas no processo de raiz.

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

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

  • recvbuf [out]
    O ponteiro 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 no 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_SCATTERV(SENDBUF, SENDCOUNT, DISPLS, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE, ROOT, COMM, IERROR)
        <type> SENDBUF(*), RECVBUF(*)
        INTEGER SENDCOUNT, SENDTYPE, DISPLS(*), RECVCOUNT(*), RECVTYPE, ROOT, COMM, IERROR

Observações

A função MPI_Scatterv expande a funcionalidade da função MPI_Scatter ao permitir que uma contagem variada de dados, conforme especificado na matriz sendcounts , seja enviada para cada processo.

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

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 assinatura de tipo, conforme especificado pelos parâmetros sendcount e sendtype para o processo de raiz, tem de ser igual à assinatura de tipo, conforme especificado pela conta de recvcount, e os parâmetros de tipo revtype 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.

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

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_Scatter