10.07.2015 Views

Scarica il pdf con la mia tesi - Parallel Programming Laboratory

Scarica il pdf con la mia tesi - Parallel Programming Laboratory

Scarica il pdf con la mia tesi - Parallel Programming Laboratory

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

24 Strategie di parallelizzazione Cap. 3In alcuni codici come [Springel, 7] in cui esiste una gestione del rib<strong>il</strong>anciamentodiversa da quel<strong>la</strong> da noi implementata viene caricato <strong>il</strong> f<strong>il</strong>e iniziale in modo round-robine poi viene generata una suddivisione che assegna a ciascun processore un eguale numerodi particelle e queste vengono scambiate tra i processori in memoria. Nel nostrocaso invece non è possib<strong>il</strong>e perché l’algoritmo prevede di averne una suddivisione preesistente:è quindi necessario approntare un codice apposito che sopperisca a questoin<strong>con</strong>veniente.Per risolvere <strong>il</strong> problema viene in nostro aiuto <strong>il</strong> formato dei f<strong>il</strong>e di ingresso, formatopartico<strong>la</strong>re scritto dal prof. Tormen (vedi [Tormen, 9]), nei quali vengono elencatetutte le particelle <strong>con</strong> le loro posizioni, velocità e masse.È stato implementato un metodo, <strong>il</strong> cui funzionamento si può vedere graficamentein Figura 3.7, che va a leggere l’input e a mappare lo spazio di simu<strong>la</strong>zione in una tabel<strong>la</strong>tridimensionale in modo che in ogni cel<strong>la</strong> del<strong>la</strong> griglia sia indicata <strong>la</strong> quantità diparticelle in quel<strong>la</strong> regione di spazio. Si va poi a partizionare <strong>il</strong> dominio <strong>con</strong>siderandouniforme <strong>la</strong> distribuzione delle particelle all’interno di una cel<strong>la</strong> (in figura <strong>il</strong> partizionamentogenerato è in linea tratteggiata). Da sperimentazioni si può vedere che già<strong>con</strong> qualche centinaio di celle per <strong>la</strong>to <strong>la</strong> decomposizione effettuata è errata di qualchepunto percentuale, del tutto irr<strong>il</strong>evante per <strong>il</strong> caricamento.La complessità di tale algoritmo, che viene eseguito da un solo processore <strong>il</strong> qualepropaga poi <strong>il</strong> risultato agli altri, è O(N + P). È lineare nel numero di particelle N inquanto queste vengono lette una so<strong>la</strong> volta dal f<strong>il</strong>e. È lineare nel numero di processoriperché dati P processori devono essere calco<strong>la</strong>ti P − 1 tagli ognuno dei quale richiedeun numero proporzionale al<strong>la</strong> profondità del taglio e al<strong>la</strong> dimensione del<strong>la</strong> tabel<strong>la</strong> cheè una costante.Al<strong>la</strong> fine ogni processore va a leggere dal f<strong>il</strong>e di input i dati che gli interessano.3.3.2 Mantenimento datiDato che l’algoritmo è totalmente dinamico è necessario che i dati re<strong>la</strong>tivi ai dominisiano salvati su f<strong>il</strong>e qualora si voglia poter riavviare <strong>la</strong> simu<strong>la</strong>zione in un se<strong>con</strong>domomento. Le modalità di riavvio di una simu<strong>la</strong>zione (come spiegato in [Favaretto, 6,pp. 31]) sono due: mediante f<strong>il</strong>e di restart oppure mediante snapshot.Un f<strong>il</strong>e di restart <strong>con</strong>tiene una copia del<strong>la</strong> memoria al momento del salvataggio eviene ut<strong>il</strong>izzato solo dal nostro programma pertanto non è necessaria <strong>la</strong> compatib<strong>il</strong>ità<strong>con</strong> altri codici e si è potuto modificarne <strong>il</strong> formato in modo tale da salvare anche leinformazioni re<strong>la</strong>tive ai domini.Uno snapshot è invece un f<strong>il</strong>e <strong>con</strong>tenente solo alcuni dati re<strong>la</strong>tivi alle particelle cheservono poi per delle analisi post-simu<strong>la</strong>zione. Il fatto che tale f<strong>il</strong>e debba interagire <strong>con</strong>altri programmi ha posto immediatamente dei vincoli sul suo formato. La soluzionesi è trovata andando a creare un f<strong>il</strong>e aggiuntivo, comune a tutti gli snapshot di unasimu<strong>la</strong>zione, che <strong>con</strong>tiene indicazione su quante particelle ogni processore <strong>con</strong>tenevaal momento del salvataggio dello snapshot e di quale dominio gli competeva.In tale modo è poi possib<strong>il</strong>e andare a recuperare dallo snapshot (che magari è scrittoda più f<strong>il</strong>e come si vedrà nel<strong>la</strong> Sez. 4.5 a pag. 33) esattamente <strong>la</strong> situazione esistente

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!