funzione MPI_Reduce
Esegue un'operazione di riduzione globale in tutti i membri di un gruppo. È possibile specificare un'operazione matematica o logica predefinita o un'operazione definita dall'applicazione.
Sintassi
int MPIAPI MPI_Reduce(
_In_ void *sendbuf,
_Out_opt_ void *recvbuf,
int count,
MPI_Datatype datatype,
MPI_Op op,
int root,
MPI_Comm comm
);
Parametri
sendbuf [in]
Handle in un buffer che contiene i dati da inviare al processo radice.Se il parametro comm fa riferimento a un intracommunicator, è possibile specificare un'opzione sul posto specificando MPI_IN_PLACE in tutti i processi. I parametri sendcount e sendtype vengono ignorati. Ogni processo immette i dati nell'elemento buffer di ricezione corrispondente. Il processo ninvia i dati all'elemento ndel buffer di ricezione. Il processo radice accetta i dati di input dall'elemento corrispondente del buffer di ricezione e lo sostituisce con i dati di output.
recvbuf [out, facoltativo]
Handle in un buffer per ricevere il risultato dell'operazione di riduzione. Questo parametro è significativo solo nel processo radice.count
Numero di elementi da inviare da questo processo.datatype
Tipo di dati di ogni elemento nel buffer. Questo parametro deve essere compatibile con l'operazione come specificato nel parametro op .Op
Operazione di riduzione globale da eseguire. L'handle può indicare un'operazione predefinita o definita dall'applicazione. Per un elenco di operazioni predefinite, vedere l'argomento MPI_Op .radice
Classificazione del processo di ricezione 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_REDUCE(SENDBUF, RECVBUF, COUNT, DATATYPE, OP, ROOT, COMM, IERROR)
<type> SENDBUF(*), RECVBUF(*)
INTEGER COUNT, DATATYPE, OP, ROOT, COMM, IERROR
Commenti
La funzione MPI_Reduce viene implementata con il presupposto che l'operazione specificata sia associativa. Tutte le operazioni predefinite sono progettate per essere associative e commutative. Gli utenti possono definire operazioni progettate per essere associative, ma non commutative. L'ordine di valutazione predefinito di un'operazione di riduzione è determinato dai ranghi dei processi nel gruppo. Tuttavia, l'implementazione può sfruttare l'associatività o l'associatività e la commutabilità per modificare l'ordine della valutazione. Questo processo può modificare il risultato della riduzione per le operazioni che non sono strettamente associative e commutative, ad esempio l'aggiunta a virgola mobile.
Alcune applicazioni non possono ignorare la natura non associativa delle operazioni a virgola mobile o possono usare operazioni definite dall'utente che richiedono un ordine speciale di valutazione e non possono essere considerate associative. In questo caso, è possibile applicare l'ordine di valutazione in modo esplicito. Ad esempio, nel caso di operazioni che richiedono una stretta a sinistra a destra o a destra, ordine di valutazione, è possibile usare il processo seguente:
- Raccogliere tutti gli operandi in un singolo processo, ad esempio usando la funzione MPI_Gather .
- Applicare l'operazione di riduzione nell'ordine richiesto, ad esempio usando la funzione MPI_Reduce_local .
- Se necessario, trasmettere o dispersione il risultato agli altri processi.
Nota
È possibile fornire operazioni definite dall'utente diverse alla funzione MPI_Reduce in ogni processo. La funzione non definisce quali operazioni vengono usate su quali operandi in questo caso. Non è possibile fare ipotesi su come viene implementata la funzione MPI_Reduce . È più sicuro specificare la stessa operazione in ogni processo.
Gli operatori definiti dall'utente possono operare su tipi di dati generali e derivati. In questo caso, ogni argomento a cui viene applicata l'operazione di riduzione è un elemento descritto da tale tipo di dati, che può contenere diversi valori di base.
I tipi di dati sovrapposti sono consentiti nei buffer di invio, ma non nei buffer di ricezione. I tipi di dati sovrapposti nei buffer di ricezione possono dare risultati imprevedibili e vengono considerati un errore.
Se il parametro comm fa riferimento a un intracommunicator, la funzione MPI_Reduce combina gli elementi come specificato nel buffer di input di ogni processo nel gruppo e utilizzando l'operazione specificata, restituisce il valore combinato nel buffer di output del processo radice.
Il buffer di input e il buffer di output hanno lo stesso numero di elementi dello stesso tipo di dati. Chiamare la funzione in tutti i membri del gruppo usando gli stessi valori per il conteggio, il tipo di dati, l'op, la radice e i parametri comm . Questa procedura garantisce che tutti i processi forniscano buffer di input e buffer di output della stessa lunghezza, con elementi dello stesso tipo.
Ogni processo può fornire un elemento o una sequenza di elementi, in questo caso l'operazione viene eseguita per ogni elemento in ogni voce della sequenza. Ad esempio, se l'operazione è MPI_MAX e il buffer di invio contiene due elementi che sono numeri a virgola mobile, recvbuf(1)
riceve il massimo globale di (sendbuf(1))
e recvbuf(2)
riceve il massimo globale di (sendbuf(2))
.
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 . Solo i parametri del buffer di invio sono significativi nei processi B di gruppo e solo i parametri del buffer di ricezione sono significativi nel 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 |