Compartilhar via


função MPI_Recv

Executa uma operação de recebimento e não retorna até que uma mensagem correspondente seja recebida.

Sintaxe

int MPIAPI MPI_Recv(
  _In_opt_ void         *buf,
           int          count,
           MPI_Datatype datatype,
           int          source,
           int          tag,
           MPI_Comm     comm,
  _Out_    MPI_Status   *status
);

Parâmetros

  • buf [in, opcional]
    Um ponteiro para o buffer que contém os dados a serem enviados.

  • contagem
    O número de elementos no buffer. Se a parte de dados da mensagem estiver vazia, defina o parâmetro count como 0.

  • datatype
    O tipo de dados dos elementos na matriz de buffer.

  • source
    A classificação do processo de envio dentro do comunicador especificado. Especifique a constante MPI_ANY_SOURCE para especificar que qualquer fonte é aceitável.

  • tag
    A marca de mensagem usada para distinguir diferentes tipos de mensagens. Especifique a constante MPI_ANY_TAG para indicar que qualquer marca é aceitável.

  • comm
    O identificador para o comunicador.

  • status [out]
    No retorno, contém um ponteiro para uma estrutura MPI_Status em que as informações sobre a mensagem recebida são armazenadas.

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_RECV(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, STATUS, IERROR)
        <type> BUF(*)
        INTEGER COUNT, DATATYPE, SOURCE, TAG, COMM, STATUS(MPI_STATUS_SIZE), IERROR

Comentários

O comprimento da mensagem recebida deve ser menor ou igual ao comprimento do buffer de recebimento. Essa função retornará um erro de estouro se todos os dados de entrada não se ajustarem ao buffer de recebimento.

Se a mensagem recebida for menor que o buffer, somente a parte do buffer que corresponde à mensagem será modificada. O restante do buffer não é modificado.

Os processos podem enviar mensagens para si mesmos. No entanto, não é seguro fazer isso com as operações de envio e recebimento de bloqueio, MPI_Send e MPI_Recv, pois essas operações de envio e recebimento de bloqueio podem causar um deadlock.

Observação

Há uma assímetria entre as operações de envio e recebimento. Uma operação de recebimento pode aceitar mensagens de um remetente arbitrário, mas uma operação de envio deve especificar um receptor exclusivo. Isso implementa um estilo de comunicação por push, em que a transferência de dados é efetuada pelo remetente, em vez de um estilo de pull em que a transferência de dados é efetuada pelo receptor.

 

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 ponto a ponto de MPI

MPI_Send

MPI_Irecv

MPI_Datatype

MPI_Comm

MPI_Status