Qual è la differenza tra un comunicatore e un gruppo in MPI?
-
27-09-2019 - |
Domanda
Ho letto le definizioni di questi termini e la mia interpretazione è che esiste una relazione tra un gruppo e un comunicatore. Un gruppo è un insieme di processi che desiderano comunicare tra loro e un comunicatore è un'implementazione per un gruppo.
È corretto? Perché avere due termini diversi se è così?
Soluzione
UN gruppo è un Set di identificatori di processo ordinati (MPI 2.2 Spec, sec 6.2.1). L'ordinamento è dato associando a ciascun identificatore di processo un unico rango Da 0 a Group.size - 1.
UN comunicatore incapsula tutte le comunicazioni tra un insieme di processi. Un intra-comunicatore è associato a un gruppo e contesti di comunicazione sia per la comunicazione point-to-point che collettiva e forse altre informazioni di contesto come topologie virtuali (Spec, 6.1.2). Un inter-comunicatore è associato a due gruppi non sovrapposti.
(Probabilmente molto libera) penso a un gruppo di un comunicatore come alla sua tavola dei simboli.
Un gruppo può contenere identificatori di processo da diversi comunicatori.
Infine, la costruzione e le operazioni sui gruppi sono locali al processo e non comportano la comunicazione di interprocess. Questo non è, in generale, vero per i comunicatori (per loro stessa natura).
Altri suggerimenti
Ci sono molte differenze tra comunicatori e gruppi, come ho scoperto dopo aver letto le specifiche MPI.
EDIT: i gruppi sono oggetti che rappresentano gruppi di processi.
Il comunicatore è un insieme di processi che possono comunicare tra loro e possono consistere in processi di un singolo gruppo o di più gruppi.
Quindi sono entità completamente diverse. Non dovrebbero essere confusi l'uno con l'altro.
Un comunicatore contiene gruppi mentre un gruppo è solo una raccolta di processi.
Se un comunicatore contiene solo un gruppo, si chiama intracommunicator (il comunicatore, MPI_COMM_World è uno di questi che si riferisce a un gruppo che include tutti i ranghi).
Se contiene due gruppi, viene chiamato in intercomunicatore (non ce ne sono creati per impostazione predefinita per te).
Date un'occhiata al https://computing.llnl.gov/tutorials/mpi_advanced/davidcronkslides.pdf dove dà un'ottima spiegazione pittorica di come un comunicatore sia un contenitore per uno o due gruppi.
Un gruppo in MPI corrisponde al concetto matematico "Set", che viene introdotto in MPI per facilitare l'organizzazione dei processi e creare nuove comunicazioni. Ad esempio, è possibile utilizzare le operazioni di unione e di intersezione su set per creare nuovi set in modo da poterli utilizzare per creare nuovi comunicatori.
Un gruppo non ha nulla a che fare con le comunicazioni sebbene un gruppo possa essere utilizzato per creare un comunicatore (un comunicatore è un gruppo più un contesto).
Un gruppo può anche essere utilizzato come ID nella distribuzione di attività/dati tra diversi processi. Ad esempio, possiamo verificare se un processo è in un gruppo per determinare se dovrebbe fare qualcosa.
UN comunicatore è un oggetto che descrive un gruppo di processi. In molte applicazioni tutti i processi funzionano insieme strettamente accoppiati e l'unico comunic di cui hai bisogno è MPI_COMM_WORLD.
gruppo descrivendo tutti i processi con cui inizia il tuo lavoro.