Salve a tutti,
Ho un problema con la parallelizzazione di un codice fortran. La parte "lenta" l'ho resa parallela tramite le librerie MPI ma quando eseguo il run con due processori mi da un errore che non mi da se lo lanciassi con un solo processore. Volevo chiedervi. Sapete per caso se i due processori hanno una memoria dedicata oppure hanno una memoria condivisa e quindi se uno modifica una variabile l'altro se la ritrova modificata?
Grazie a tutti per l'aiuto
Librerie MPI
Moderatori:
Paolino,
fairyvilje
3 messaggi
• Pagina 1 di 1
1
voti
[2] Re: Librerie MPI
Non conosco precisamente MPI ma presumo che utilizzino (anche) memoria condivisa. Per cui, se vi sono variabili utilizzate in piu' punti da parti diverse del programma occorre porre attenzione a questo fatto, dato che una parte del programma potrebbe accedere a una determinata variabile che nel frattempo e' stata modificata in maniera imprevista da qualche altra sezione di codice eseguita parallelamente.
La programmazione multithread richiede tutta una serie di accorgimenti per evitare questo e altri impevisti.
Studiati i procedimenti di lock/unlock. Credo ci sia una spiegazione dettagliata sull'uso delle MPI.
In soldoni, non e' pensabile prendere un programma di tipo sequenziale classico e renderlo multithread senza apportargli ritocchi nelle cosiddette "critical sections", che possono essere di molti tipi.
Max
La programmazione multithread richiede tutta una serie di accorgimenti per evitare questo e altri impevisti.
Studiati i procedimenti di lock/unlock. Credo ci sia una spiegazione dettagliata sull'uso delle MPI.
In soldoni, non e' pensabile prendere un programma di tipo sequenziale classico e renderlo multithread senza apportargli ritocchi nelle cosiddette "critical sections", che possono essere di molti tipi.
Max
Se funziona quasi bene, è tutto sbagliato. A.Savatteri/M.Mazza
0
voti
[3] Re: Librerie MPI
Ciao, i due processori hanno un area di memoria separata perciò le modifiche apportate all'interno di un processo non coinvolgono la "medesima" variabile presente in un altro processo.
Se hai bisogno di condividere la memoria dovresti far ricorso ad openMP oppure usare i meccanismi di memoria condivisa messi a disposizione da Fortran.
Per quanto riguarda MPI(e le librerie che le implementano), queste sono nate proprio per avere un parallelismo dove, al più, vengono condivise le istruzioni mantenendo però aree di memoria ben separate, per capire meglio faccio un esempio più "pratico":
eseguendo il codice con "mpirun -n 2" avremo due processi P1 e P2 ciascuno con le proprie variabili var (inizializzata a 0) e proc_rank.
Supponiamo che a P1 viene assegnato il rank 0 e che a P2 il rank 1.
Dopo la chiamata a MPI_Comm_rank già si può notare la natura SIMD/MIMD di MPI, infatti, in P1 proc_rank verrà inizializzata a 0 mentre in P2 ad 1. Con la variabile "var" avviene lo stesso: nei processi con un rank != 0 gli verrà assegnato 1 mentre nel processo con rank 0 gli verrà assegnato 10.
Se hai bisogno di condividere la memoria dovresti far ricorso ad openMP oppure usare i meccanismi di memoria condivisa messi a disposizione da Fortran.
Per quanto riguarda MPI(e le librerie che le implementano), queste sono nate proprio per avere un parallelismo dove, al più, vengono condivise le istruzioni mantenendo però aree di memoria ben separate, per capire meglio faccio un esempio più "pratico":
- Codice: Seleziona tutto
int main(int argc, char** argv){
int var = 0, //variabile target
proc_rank;
MPI_Comm_rank(MPI_COMM_WORLD, &proc_rank);
if(proc_rank) //rank != 0
var = 1;
else var = 10;
printf("rank %d, var value:%d\n", proc_rank, var);
...
}
eseguendo il codice con "mpirun -n 2" avremo due processi P1 e P2 ciascuno con le proprie variabili var (inizializzata a 0) e proc_rank.
Supponiamo che a P1 viene assegnato il rank 0 e che a P2 il rank 1.
Dopo la chiamata a MPI_Comm_rank già si può notare la natura SIMD/MIMD di MPI, infatti, in P1 proc_rank verrà inizializzata a 0 mentre in P2 ad 1. Con la variabile "var" avviene lo stesso: nei processi con un rank != 0 gli verrà assegnato 1 mentre nel processo con rank 0 gli verrà assegnato 10.
3 messaggi
• Pagina 1 di 1
Chi c’è in linea
Visitano il forum: Nessuno e 9 ospiti

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)


