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 |