Condividi tramite


funzione MPI_Recv

Esegue un'operazione di ricezione e non restituisce finché non viene ricevuto un messaggio corrispondente.

Sintassi

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

Parametri

  • buf [in, facoltativo]
    Puntatore al buffer che contiene i dati da inviare.

  • count
    Numero di elementi contenuti nel buffer. Se la parte dei dati del messaggio è vuota, impostare il parametro count su 0.

  • datatype
    Tipo di dati degli elementi nella matrice di buffer.

  • source
    Classificazione del processo di invio all'interno del comunicatore specificato. Specificare la costante MPI_ANY_SOURCE per specificare che qualsiasi origine sia accettabile.

  • tag
    Tag di messaggio usato per distinguere tipi diversi di messaggi. Specificare la costante MPI_ANY_TAG per indicare che qualsiasi tag è accettabile.

  • Comm
    Handle per il comunicatore.

  • stato [out]
    Al ritorno, contiene un puntatore a una struttura MPI_Status in cui vengono archiviate le informazioni sul messaggio ricevuto.

Valore restituito

Restituisce MPI_SUCCESS sull'esito positivo. In caso contrario, il valore restituito è un codice di errore.

In Fortran il valore restituito viene archiviato nel parametro 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

Commenti

La lunghezza del messaggio ricevuto deve essere minore o uguale alla lunghezza del buffer di ricezione. Questa funzione restituisce un errore di overflow se tutti i dati in ingresso non rientrano nel buffer di ricezione.

Se il messaggio ricevuto è più breve del buffer, viene modificata solo la parte del buffer corrispondente al messaggio. Il resto del buffer non viene modificato.

I processi possono inviare messaggi a se stessi. Tuttavia, non è sicuro farlo con le operazioni di invio e ricezione di blocco, MPI_Send e MPI_Recv, perché queste operazioni di invio e ricezione di blocco possono causare un deadlock.

Nota

Esiste un asimmetria tra le operazioni di invio e ricezione. Un'operazione di ricezione può accettare messaggi da un mittente arbitrario, ma un'operazione di invio deve specificare un ricevitore univoco. In questo modo viene implementato uno stile di comunicazione push, in cui il trasferimento dei dati viene applicato dal mittente anziché da uno stile pull in cui il trasferimento dei dati viene applicato dal ricevitore.

 

Requisiti

Prodotto

Pacchetto ridistribuibile HPC Pack 2012 MS-MPI Redistributable Package, HPC Pack 2008 R2 MS-MPI Redistributable Package, HPC Pack 2008 MS-MPI Redistributable Package o HPC Pack 2008 Utilità client

Intestazione

Mpi.h; Mpif.h

Libreria

Msmpi.lib

DLL

Msmpi.dll

Vedi anche

Funzioni mpI punta a punto

MPI_Send

MPI_Irecv

MPI_Datatype

MPI_Comm

MPI_Status