Partilhar via


função MPI_Recv

Efetua uma operação de receção e não devolve até ser recebida uma mensagem correspondente.

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 a memória intermédia que contém os dados a enviar.

  • contagem
    O número de elementos na memória intermédia. Se a parte de dados da mensagem estiver vazia, defina o parâmetro de contagem como 0.

  • tipo de dados
    O tipo de dados dos elementos na matriz de memória intermédia.

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

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

  • vírgula
    A alça do comunicador.

  • status [out]
    Na devolução, contém um ponteiro para uma estrutura MPI_Status onde são armazenadas informações sobre a mensagem recebida.

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

Observações

O comprimento da mensagem recebida tem de ser menor ou igual ao comprimento da memória intermédia de receção. Esta função devolve um erro de excesso se todos os dados recebidos não caberem na memória intermédia de receção.

Se a mensagem recebida for mais curta do que a memória intermédia, apenas a parte da memória intermédia que corresponde à mensagem é modificada. O resto da memória intermédia não é modificado.

Os processos podem enviar mensagens para si próprios. No entanto, não é seguro fazê-lo com as operações de envio e receção de bloqueio, MPI_Send e MPI_Recv, uma vez que estas operações de envio e receção de bloqueio podem causar um impasse.

Nota

Existe uma assimetria entre as operações de envio e receção. Uma operação de receção pode aceitar mensagens de um remetente arbitrário, mas uma operação de envio tem de especificar um recetor exclusivo. Isto implementa um estilo de comunicação push, em que a transferência de dados é efetuada pelo remetente, em vez de um estilo pull em que a transferência de dados é efetuada pelo recetor.

 

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 Ponto a Ponto do MPI

MPI_Send

MPI_Irecv

MPI_Datatype

MPI_Comm

MPI_Status