Come eseguire MPI-3.0 in modalità di memoria condivisa come OpenMP


14

Sto parallelizzando il codice per risolvere numericamente un modello di bilancio demografico a 5 dimensioni. Attualmente ho un ottimo codice parallelizzato MPICH2 in FORTRAN ma quando aumentiamo i valori dei parametri gli array diventano troppo grandi per essere eseguiti in modalità di memoria distribuita.

Ho accesso a un cluster con 15 nodi, in cui ogni nodo ha due CPU 8 core e 128 GB di RAM. Voglio scrivere eseguire un programma con MPI-3.0 in modalità memoria condivisa in modo che ogni processo non generi la propria copia di ciascun array.

Prima di poter eseguire qualsiasi cosa sul cluster, devo provarlo su un desktop che esegue Ubuntu. È essenzialmente un blade del cluster in quanto ha due CPU a 8 core e 128 GB di RAM. Scriverò e testerò il mio codice su di esso, quindi per favore orienta le tue risposte verso l'esecuzione di programmi sul computer Ubuntu.

Ho letto che esiste un modo per eseguire MPI-3.0 in modalità di memoria condivisa come OpenMP anziché la sua modalità di memoria distribuita predefinita.

Domande:

  1. Come dovrò modificare il mio codice? Devo aggiungere chiamate ad altre funzioni MPI come MPI_WIN_ALLOCATE?

  2. Come posso compilare il mio codice per eseguire MPI-3.0 in modalità memoria condivisa? Sarà diverso se si trova su più nodi?

Se possibile, fornire script di compilazione di esempio. Ho anche solo compilatori GNU. Il cluster che utilizzo non supporta i compilatori Intel.


1
Sì, dovresti essere in grado di eseguire MPI su un sistema di memoria condivisa. Tuttavia, il modo in cui è effettivamente programmato sarà identico. Il codice dovrebbe essere lo stesso per i sistemi di memoria condivisa e distribuita. Come viene eseguita è l'unica differenza.
NoseKnowsTutto il

Inoltre, anche se non l'ho testato, credo che dovresti essere in grado di eseguire il tuo codice usando il comando mpiexec -n 8 /path/to/applicationper falsificare il tuo computer nel pensare che abbia 8 nodi diversi.
NoseKnowsTutto il

L'ho già eseguito su un sistema di memoria condivisa ma voglio che i core di elaborazione condividano la RAM, come in OpenMP. Alcuni dei miei array sono 6 GB, quindi ho bisogno di tutti i core su ciascun nodo per funzionare in modalità di memoria condivisa.
Franklin Betten,

2
Bene, questo è per un progetto di ricerca. Quindi devo ridimensionare la dimensione del problema. Ho già un codice funzionante, quindi l'unica cosa che impedisce il ridimensionamento è la memoria necessaria. Mi sono imbattuto in alcuni documenti e powerpoint di conferenze MPI che suggeriscono che MPI-3.0 può condividere la memoria con nuove funzioni di chiamata che sono state aggiunte nella categoria di comunicazione unilaterale. Funziona come MPI_WIN_ALLOCATE_SHARE
Franklin Betten il

2
www.eurompi2014.org/tutorials/hoefler-advanced-mpi-eurompi14.pdf cs.utexas.edu/users/flame/BLISRetreat2014/slides/…
Franklin Betten

Risposte:


0

Ho anche trovato questo link su Stack Overflow. Giuro di aver cercato domande come le mie per sempre, ma sembra che il modo migliore per cercare una domanda in overflow dello stack sia iniziare a fare una domanda e suggerirà post simili.

Comunque qui è il link che in effetti dice che è possibile eseguire MPI3.0 + in modalità di memoria condivisa come openmp. Ci sono altre fonti che ho trovato che suggeriscono anche e alcune che affermano che puoi ma non spiegare come o dare risorse per capirlo.

/programming/24797298/mpi-fortran-code-how-to-share-data-on-node-via-openmp

Dopo aver seguito i consigli forniti qui in questo link, ho riscontrato problemi nel mettere USE 'mpi_f08' in cima al mio codice. Sto usando gfortran-4.8 che apparentemente non ha attualmente abbastanza supporto FORTRAN2008 per USARE mpi_f08. Probabilmente la persona in questo link stava usando il compilatore Intel fortran 2008. Puoi usare USE mpi che copre abbastanza bene fino a Fortran2003. Tuttavia, non credo che Fortran 2003 abbia le funzioni Type () necessarie per utilizzare le funzioni di accesso alla memoria remota, come MPI_WIN_ALLOCATE_SHARED, quindi non è possibile utilizzarle senza FORTRAN2008. Ma davvero non ho abbastanza risorse per dirlo con certezza, ma ciò che ho trovato lo suggerisce.


1
È possibile utilizzare MPI_Win_allocate_shared con tutte e tre le interfacce Fortran. Inoltre, puoi scrivere il tuo con Fortran 2003 ISO_C_BINDING e l'interfaccia C.
Jeff,

Per favore, dimmi perché è necessario Type () per utilizzare RMA da Fortran? Non conosco tale limitazione. RMA è stato usato con F77 per molti anni.
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.