Boost :: mpi o C MPI per applicazioni scientifiche ad alte prestazioni?


16

La cosa che non mi piace di più di MPI riguarda i tipi di dati (ovvero mappe / maschere di dati) perché non si adattano perfettamente al C ++ orientato agli oggetti. boost::mpisupporta solo MPI 1.1, tuttavia, dal loro sito Web:

boost :: mpi è un'interfaccia intuitiva C ++ per l'interfaccia di passaggio messaggi standard ... Boost.MPI può creare tipi di dati MPI per tipi definiti dall'utente utilizzando la libreria Boost.Serialization

Qualcuno ha avuto esperienza con boost::mpiper il calcolo scientifico serio? Lo consiglieresti? Hai avuto problemi (problemi di ridimensionamento, problemi del compilatore, errori, funzionalità non implementate, necessità di alcune funzionalità mpi 2.2)?

Puoi commentare l'utilizzo boost::mpianziché utilizzare l'implementazione MPI C da C ++? Riesci a combinare entrambi (usa boost :: mpi quando puoi, C-MPI altrove)?

Conosci qualche codice scientifico di grandi dimensioni che utilizza boost::mpi?


Dovresti anche guardare questa pagina boost.org/doc/libs/1_50_0/doc/html/mpi/… per essere sicuro che tutte le funzioni di cui hai bisogno siano supportate. Dovrebbe essere considerata anche la possibilità di implementarli da soli.
Alexander

1
Il miglior motivo per cui mi viene in mente di usare Boost :: MPI è che supporta automaticamente la serializzazione dei tipi C ++. L'interfaccia MPI C non può farlo da sola e dovresti creare tipi di dati MPI per tutti i tuoi oggetti C ++ per passarli tramite Send / Recv, ecc., A meno che tu non voglia fare la tua serializzazione con altri mezzi.
Jeff

L'interfaccia MPI Elemental (libelemental.org) ( github.com/elemental/Elemental/blob/master/src/core/imports/… ) esegue il rilevamento automatico del tipo in modo elegante. Tuttavia, non tenta di fare molte delle cose che Boost :: MPI fa.
Jeff,

Risposte:


13

Ho sempre pensato che dovremmo usarlo nel nostro progetto, affare.II, perché è di livello superiore al puro MPI e può salvare alcune righe di codice qua e là. Detto questo, ciò che ho imparato nel corso degli anni è che la maggior parte del codice di alto livello in realtà non ha molto codice MPI per cominciare - le 600.000 linee di codice in questione. II hanno solo ~ 50 chiamate a MPI. Questo è sicuramente molto meno di un pacchetto come PETSc, ma penso sia vero che la maggior parte dei codici hanno meno chiamate MPI di quanto ci si aspetterebbe inizialmente e che, di conseguenza, il vantaggio di utilizzare qualcosa di livello superiore non è eccezionale come uno potrebbe pensare a prima vista.

Ciò che si riduce a ciò è che tu debba considerare quali sono i compromessi. Quanto MPI dovrai usare e come si confronta con lo sforzo aggiuntivo richiesto per creare e collegarti a una libreria esterna.


6

Per quanto ne so, boost::mpiè solo un c++wrapper attorno Call'API. Pertanto, dovresti essere in grado di utilizzare boost::mpie passare Call'API ogni volta che alcune funzionalità non sono implementate. Infatti, dalla loro pagina web:

Le sottili astrazioni in Boost.MPI consentono di combinarlo facilmente con le chiamate alla libreria C MPI sottostante.

Non l'ho usato da solo e non conosco una libreria importante che lo faccia, ma mi aspetto che sia solo un involucro leggero e come tale non si dovrebbe preoccupare delle prestazioni rispetto Call'API.


2
Boost :: MPI è un wrapper attorno a un sottoinsieme di MPI; per quanto ricordo, supporta solo MPI 1.2, che è molto diverso dagli standard MPI-2.2 o MPI-3 sotto i miei aspetti.
Jeff
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.