Domanda

Ho un programma che è stato implementato in C ++, che ora voglio aggiungere il supporto MPI. C'è vincolante un MPI per C ++, con spazio dei nomi MPI e tutto.

Nel mio caso ho un oggetto specifico che è adatto ad essere il processo parallelizzato nel cluster.

Le mie domande sono:

  • qualcuno ha fatto qualcosa di simile prima? Posso ottenere alcuni consigli sul modo migliore per attuare questo?
  • Come faccio a inizializzare MPI dentro il costruttore? Dopo l'inizializzazione MPI all'interno del costruttore della classe, saranno tutte le chiamate intermedie essere parallelizzati troppo?

Ad esempio:

MyClass obj;

x = x; //this will be parallelized ?
onj.calc();

y = x++; //this will be parallelized ?

z = obj.result();
È stato utile?

Soluzione

Consiglio davvero prendere in mano il Gropp MPI Libro , aiuta davvero per MPI base!

Altri suggerimenti

MPI non parallelizzare nulla automaticamente, ti dà solo un'interfaccia per l'invio di dati tra i nodi. Il tuo codice è scritto e funziona come al solito codice sequenziale indipendentemente su ogni nodo e ogni tanto un po 'di inviare dati a un altro nodo o cercare di ricevere i dati da un altro nodo.

Chiming in su un vecchio filo, ho trovato OpenMPI e :: MPI bello lavorare con. La progettazione orientata agli oggetti della libreria può essere un po 'avvitato su, ma ho trovato molto più bello di lavorare con più pura MPI, in particolare con auto-serializzazione di molti tipi e un'interfaccia piuttosto estensibile per raccogliere / ridurre le funzioni, così come la serializzazione di tipi di utente.

Come informazioni di base:

La maggior parte delle applicazioni che utilizzano MPI sono scritti in Fortran o C. Ogni grande realizzazione del MPI è scritto in C.

Il supporto per i binding MPI C ++ è discutibile al meglio: alcuni dei tipi di dati MPI non sono disponibili (ad esempio MPI_DOUBLE), ci sono problemi con I / O e l'ordine che le intestazioni sono inclusi nel file di origine. Ci sono questioni di mutilazione dei nomi se la libreria MPI è stato costruito con C e l'applicazione è costruita con Fortran o C ++. mpich2 FAQ dispone di voci per aiutare il lavoro attraverso questi problemi. Sono meno familiarità con Open MPI ed è comportamento particolare con Fortran e C ++.

Per le vostre domande specifiche:

Credo che avete una fondamentale mis-comprensione di ciò che MPI è e non è, e come codice di applicazione dovrebbe interagire con le librerie MPI.

programmazione parallela con MPI è un ottimo riferimento per imparare a programmare con MPI. Gli esempi di codice sono in C, e la maggior parte delle MPI API vengono mostrati in un esempio. Mi raccomando che si lavora attraverso questo libro per imparare che cosa programmazione parallela è e non lo è.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top