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

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

18 Strategie di parallelizzazione Cap. 3re<strong>la</strong>tivi ai nodi interni <strong>con</strong> cui effettuare i dati in forma aggregata. In Figura 3.3 si puòvedere come può avvenire questo modo di procedere.Si pone ora <strong>il</strong> problema di decidere quali dati importare perché l’apertura di un nodointerno dipende dal<strong>la</strong> distanza dal<strong>la</strong> particel<strong>la</strong> ma anche (fattore più diffic<strong>il</strong>e da prevedere)dall’accelerazione del<strong>la</strong> particel<strong>la</strong> in esame. Processori diversi richiederebberoin linea di massima anche dati diversi data <strong>la</strong> diversa distanza tra di loro.Anche supponendo di avere degli strumenti per stab<strong>il</strong>ire che cosa importare, oppuredecidendo di importare tutti gli alberi vicini, nasce <strong>il</strong> problema di dove sistemaretemporaneamente tutti i dati in arrivo dato che, come visto all’inizio del capitolo, è necessariodistribuire le particelle, essendo troppi i dati per essere mantenuti da un soloprocessore.Infine questi dati richiederebbero di essere importati ad ogni passo in quanto cisono sempre delle particelle che vengono spostate in ciascun processore e nessunotranne <strong>il</strong> processore che le detiene può sapere come si sono spostate.3.2.2 Esportazione dei dati ed esecuzione del calcolo in remotoPer tutti i motivi sopra esposti si è stati portati verso <strong>la</strong> se<strong>con</strong>da strategia di parallelizzazioneche qui verrà esposta.Dato che tutte le forze del sistema sono lineari non ha alcuna importanza l’ordine<strong>con</strong> cui i calcoli vengono fatti, l’unica cosa importante è che siano effettuati tutti.Ciò porta a pensare di inviare i dati re<strong>la</strong>tivi alle particelle da avanzare a tutti gli altriprocessori, attendere che ciascuno di questi effettui su di esse una parte dei calcoli e poiriaggregare tutti i risultati parziali nel processore detentore del<strong>la</strong> particel<strong>la</strong> (vedi Figura3.4). Questo modo di procedere permette innanzitutto una migliore distribuzione delcarico di <strong>la</strong>voro perché, anche se un processore che detiene particelle da avanzarenecessita di una maggiore quantità di calcoli dovendo aprire più nodi, <strong>il</strong> calcolo èdi per sé maggiormente partizionato.Pensare ad esportare le particelle è sensato perché ad ogni passo solo una picco<strong>la</strong>frazione del totale di particelle viene aggiornato. Inoltre si può vedere inoltre che percalco<strong>la</strong>re le forze che agis<strong>con</strong>o su una particel<strong>la</strong> non è necessario <strong>con</strong>oscere tutto diquel<strong>la</strong> particel<strong>la</strong> ma solo <strong>la</strong> sua posizione e poco altro (un po’ di più è necessario perle forze idrodinamiche). Quindi è possib<strong>il</strong>e ut<strong>il</strong>izzare dei buffer per mantenere questidati da inviare agli altri e su questi stessi ricevere i risultati parziali (di come vengonout<strong>il</strong>izzati i buffer nel nostro programma se ne par<strong>la</strong> più in dettaglio nel<strong>la</strong> Sez. 4.2 apag. 27)3.3 Lo sb<strong>il</strong>anciamentoPoiché come si è detto le particelle si muovono durante <strong>la</strong> simu<strong>la</strong>zione, se si vuolecercare di limitare lo sb<strong>il</strong>anciamento che può insorgere tra i vari processori e usufruiredi una gestione delle forze idrodinamiche in modo da avere una regione completamenteinterna al processore, è necessario predisporre un meccanismo che aggiorni i <strong>con</strong>fini

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

Saved successfully!

Ooh no, something went wrong!