Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Ricerca personalizzata

Librerie MPI

Linguaggi e sistemi

Moderatori: Foto UtentePaolino, Foto UtenteMassimoB

0
voti

[1] Librerie MPI

Messaggioda Foto UtenteDaniele1992 » 12 ott 2017, 10:24

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
Avatar utente
Foto UtenteDaniele1992
0 2
 
Messaggi: 6
Iscritto il: 11 ago 2017, 11:25

1
voti

[2] Re: Librerie MPI

Messaggioda Foto Utentebanjoman » 12 ott 2017, 11:36

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.

O_/
Max
Se funziona quasi bene, è tutto sbagliato. A.Savatteri/M.Mazza
Avatar utente
Foto Utentebanjoman
6.038 3 8 11
Master EY
Master EY
 
Messaggi: 967
Iscritto il: 19 set 2013, 18:27

0
voti

[3] Re: Librerie MPI

Messaggioda Foto UtenteShides » 19 ott 2017, 11:31

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":

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.
Avatar utente
Foto UtenteShides
0 1
 
Messaggi: 2
Iscritto il: 19 ott 2017, 9:20
Località: Milazzp - Catania


Torna a PC e informatica

Chi c’è in linea

Visitano il forum: Nessuno e 6 ospiti