funzione MPI_Scatter
Dispersione dei dati da un membro in tutti i membri di un gruppo. La funzione MPI_Scatter esegue l'inverso dell'operazione eseguita dalla funzione MPI_Gather .
Sintassi
int MPIAPI MPI_Scatter(
_In_ void *sendbuf,
int sendcount,
MPI_Datatype sendtype,
_Out_ void *recvbuf,
int recvcount,
MPI_Datatype recvtype,
int root,
MPI_Comm comm
);
Parametri
sendbuf [in]
Handle in un buffer che contiene i dati da inviare dal processo radice.Il parametro sendbuf viene ignorato per tutti i processi non radice.
Se il parametro comm fa riferimento a un intracommunicator, è possibile specificare un'opzione sul posto specificando MPI_IN_PLACE nel processo radice. I parametri recvcount e recvtype vengono ignorati. Il vettore a dispersione è ancora considerato contenere n segmenti, dove n è la dimensione del gruppo; il segmento che corrisponde al processo radice non viene spostato.
sendcount
Numero di elementi nel buffer di invio. Se sendcount è zero, la parte dei dati del messaggio è vuota.Il parametro sendcount viene ignorato per tutti i processi non radice.
sendtype
Tipo di dati di ogni elemento nel buffer.Il parametro sendcount viene ignorato per tutti i processi non radice.
recvbuf [out]
Handle in un buffer contenente i dati ricevuti in ogni processo. Il numero e il tipo di dati degli elementi nel buffer vengono specificati nei parametri recvcount e recvtype .recvcount
Numero di elementi nel buffer di ricezione. Se il conteggio è zero, la parte dei dati del messaggio è vuota.recvtype
Tipo di dati degli elementi nel buffer di ricezione.radice
Classificazione del processo di invio all'interno del comunicatore specificato.Comm
Handle del comunicatore MPI_Comm.
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_SCATTER(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE, ROOT, COMM, IERROR)
<type> SENDBUF(*), RECVBUF(*)
INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, ROOT, COMM, IERROR
Commenti
L'effetto della funzione MPI_Scatter è come se il processo radice invia un messaggio usando la funzione MPI_Send . Questo messaggio viene suddiviso in n segmenti uguali, uno per ogni membro del gruppo. Il segmento iviene inviato al processo inel gruppo.
Se comm è un intracommunicator, il risultato è come se la radice ha eseguito n operazioni MPI_Send(sendbuf + i*sendcount*extent(sendtype), sendcount, sendtype, I, …)
di invio e ogni processo ha eseguito una ricezione, MPI_Recv(recvbuf, recvcount, recvtype, i,…)
.
La firma del tipo specificata dai parametri sendcount e sendtype per il processo radice deve essere uguale alla firma del tipo specificata dai parametri recvcount e recvtype per tutti i processi. Pertanto, la quantità di dati inviati deve essere uguale alla quantità di dati ricevuti tra qualsiasi coppia di processi. Le mappe dei tipi distinti tra mittente e ricevitore sono ancora consentite.
Tutti i parametri della funzione sono significativi nel processo radice, solo i parametri recvbuf, recvcount, recvtype, root e comm sono significativi negli altri processi. I parametri radice e comm devono essere identici in tutti i processi.
La specifica dei conteggi e dei tipi non deve causare alcuna posizione nella radice da leggere più di una volta.
Se il parametro comm fa riferimento a un intercommunicator, la chiamata comporta tutti i processi nell'intercommunicator, ma con un gruppo, un gruppo A, che definisce il processo radice. Tutti i processi nell'altro gruppo, gruppo B, impostano lo stesso valore nel parametro radice , ovvero il rango del processo radice nel gruppo A. Il processo radice imposta il valore MPI_ROOT nel parametro radice . Tutti gli altri processi nel gruppo A impostano il valore MPI_PROC_NULL nel parametro radice . I dati vengono trasmessi dal processo radice a tutti i processi nel gruppo B. I parametri del buffer dei processi nel gruppo B devono essere coerenti con il parametro buffer del processo radice.
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 |