funzione MPI_Comm_split
Partiziona il gruppo associato al comunicatore specificato in un numero specificato di sottogruppi disgiunti.
Sintassi
int MPIAPI MPI_Comm_split(
MPI_Comm comm,
int color,
int key,
_Out_ MPI_Comm *newcomm
);
Parametri
Comm
Comunicatore da dividere.color
Nuovo comunicatore a cui deve essere assegnato il processo chiamante. Il valore di colore deve essere non negativo.Se un processo specifica il valore di coloreMPI_UNDEFINED, la funzione restituisce MPI_COMM_NULL nel parametro newcomm al processo chiamante.
key
Classificazione relativa del processo chiamante nel gruppo del nuovo comunicatore. Per informazioni dettagliate sull'uso dei parametri chiave e colore , vedere Osservazioni.newcomm [out]
Al ritorno, contiene un handle per un nuovo comunicatore.
Valore restituito
Restituisce MPI_SUCCESS in caso di esito positivo. In caso contrario, il valore restituito è un codice di errore.
In Fortran il valore restituito viene archiviato nel parametro IERROR .
Fortran
MPI_COMM_SPLIT(COMM,COLOR,KEY,NEWCOMM,IERROR)
INTEGER COMM, COLOR, KEY, NEWCOMM, IERROR
Commenti
Si tratta di una funzione collettiva, ma ogni processo può specificare valori diversi per i parametri di colore e chiave .
Si tratta di un meccanismo estremamente potente per dividere un singolo gruppo di processi di comunicazione in un numero arbitrario di sottogruppi. Il numero di sottogruppi è determinato dal numero di colori specificati in tutti i processi. I comunicatori risultanti non si sovrappongono. La suddivisione di un comunicatore in questo modo è utile per definire una gerarchia di calcoli, ad esempio per l'algebra multigrid o lineare.
Ogni sottogruppo contiene tutti i processi che hanno specificato lo stesso valore per il parametro color . All'interno di ogni sottogruppo, i processi vengono classificati nell'ordine definito dal valore del parametro chiave , con vincoli interrotti in base al relativo rango nel gruppo precedente.
Con un comunicatore intracommunicator, una chiamata a MPI_COMM_CREATE(comm, group, new-comm)
equivale a una chiamata a MPI_COMM_SPLIT(comm, color, key, newcomm)
, dove i processi che sono membri del gruppo specificano il numero del gruppo, in base a una numerazione univoca di tutti i gruppi disgiunti, per il parametro color e la relativa classificazione nel gruppo per il parametro chiave . Tutti i processi che non sono membri del gruppo specificano MPI_UNDEFINED per il parametro color .
Per qualsiasi colore, i valori delle chiavi non devono essere univoci. La funzione MPI_Comm_split ordina i processi in ordine in base al valore del parametro chiave e ordina i legami in base al relativo rango nel gruppo di origine. Se lo stesso valore viene specificato per tutti i parametri chiave , tutti i processi in un determinato colore hanno lo stesso ordine di rango relativo presente nel gruppo padre.
Per gli intracommunicatori, le funzioni MPI_Comm_split e MPI_Comm_create offrono funzionalità simili per suddividere un gruppo di comunicazione in sottogruppi disgiunti.
La funzione MPI_Comm_split viene usata quando alcuni processi non dispongono di informazioni complete degli altri membri del gruppo, ma tutti i processi hanno il colore del gruppo a cui appartengono. In questo caso, l'implementazione MPI individua gli altri membri del gruppo tramite la comunicazione.
La funzione MPI_Comm_create viene usata quando tutti i processi dispongono di informazioni complete dei membri del gruppo. In questo caso, l'implementazione MPI può evitare la comunicazione aggiuntiva necessaria per individuare l'appartenenza al gruppo.
I comunicatori creati da MPI_Comm_split non possono sovrapporsi. È possibile chiamare la funzione MPI_Comm_split più volte per superare questa limitazione. In questo modo è possibile creare più strutture di comunicazione sovrapposte. L'uso creativo dei parametri di colore e chiave in tali operazioni di suddivisione è incoraggiato.
Il risultato della funzione MPI_Comm_split su un intercommunicator è che questi processi a sinistra con lo stesso colore di tali processi a destra combinano per creare un nuovo intercommunicator. Il parametro chiave definisce il rango relativo dei processi su ogni lato dell'intercommunicator. Un nuovo comunicatore con un handle di MPI_COMM_NULL viene restituito a tali processi che specificano MPI_UNDEFINED come colore oppure specificano un colore specificato solo su un lato dell'intercommunicator.
Requisiti
Prodotto |
Pacchetto ridistribuibile DI HPC Pack 2012 MS-MPI, HPC Pack 2008 R2 MS-MPI Redistributable Package, HPC Pack 2008 MS-MPI Redistributable Package o utilità client HPC Pack 2008 |
Intestazione |
Mpi.h; Mpif.h |
Libreria |
Msmpi.lib |
DLL |
Msmpi.dll |