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.

28 Modifiche al codice Cap. 4zione: uno locale e uno globale <strong>la</strong> cui dimensione è impostab<strong>il</strong>e dall’utente (CommSize,vedi Sez. 4.7 a pag. 39 per una descrizione del parametro).P 0P 1P 2P 3Dati da e<strong>la</strong>borare(in buffer Locale)Esportazione a tuttii processoriut<strong>il</strong>izzo di SendRecvper <strong>la</strong> comunicazionediretta <strong>con</strong> tutti iprocessori singo<strong>la</strong>rmenteDati esportati per e<strong>la</strong>borazione(in buffer Globale)P 0P 1P 2P 3Ogni processorefa i calcoli sui datiricevuti <strong>con</strong> i datiin suo possessoP 0I <strong>con</strong>tributi parziali dei variP 0P 1processori vengonoriaggregati sommandoliP 1P 2P 3Risultati totali riaggregati(in buffer Locale)ut<strong>il</strong>izzo di SendRecvpiù somme eseguitelocalmenteRisultati parziali dei calcoli locali(in buffer Globale)P 2P 3Figura 4.1: Schema di come vengono ut<strong>il</strong>izzati i buffer per <strong>il</strong> calcolo delle forze inremotoNel buffer locale vengono posti i dati dai singoli processori prima di essere esportatie i dati raccolti dai processori dopo le e<strong>la</strong>borazioni in remoto. Poiché in questi bufferdevono essere <strong>con</strong>tenuti solo i dati re<strong>la</strong>tivi ad un processore <strong>la</strong> loro dimensione è metàdi quel<strong>la</strong> dei buffer globali in quanto un processore non deve mai poter avere più dimetà di tutti i dati da gestire, altrimenti ci si troverebbe sicuramente in una situazionedi forte sb<strong>il</strong>anciamento, cosa da evitare.Nel buffer globale vengono invece posti tutti i dati provenienti da tutti i processoriin modo che quando un processore deve fare i suoi calcoli trovi tutto in un array unicoe possa scandirlo <strong>con</strong> maggiore fac<strong>il</strong>ità. Questi buffer vengono poi sovrascritti a manoa mano che i dati vengono <strong>con</strong>sumati e si produ<strong>con</strong>o i risultati. In questo modo si evitadi dover allocare due buffer per mantenere input e output. Per evitare di cancel<strong>la</strong>re datiprima che siano stati ut<strong>il</strong>izzati basta avere l’accortezza di iniziare ad e<strong>la</strong>borare i dati apartire dal<strong>la</strong> fine del buffer qualora i dati in uscita siano più grandi di quelli in ingresso.La Figura 4.1 mostra come tale procedimento evolve nel tempo: ogni processoreha una certa quantità di particelle da avanzare e quindi su cui calco<strong>la</strong>re le forze. Questevengono inviate a tutti i processori (compreso se stesso) e posizionate nel buffer globale.A questo punto ogni processore può eseguire i calcoli <strong>con</strong> i dati in suo possesso

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

Saved successfully!

Ooh no, something went wrong!