Risposte:
Esiste un'ampia varietà di algoritmi; Barnes Hut è un popolare metodo e il metodo multipolare veloce è un'alternativa O ( N ) molto più sofisticata .
Entrambi i metodi fanno uso di una struttura di dati ad albero in cui i nodi interagiscono essenzialmente solo con i vicini più vicini a ciascun livello dell'albero; puoi pensare di dividere l'albero tra l'insieme dei processi a una profondità sufficiente e poi farli cooperare solo ai massimi livelli.
Puoi trovare un recente documento che discute FMM su macchine petascale qui .
Guarda il metodo multipolare veloce . È altamente scalabile e . Permette di scambiare tra precisione e costo. Ecco un esempio in cui viene eseguito a 42 Tflops su un cluster GPU .
Come fonte alternativa, potresti anche esaminare metodi simili a Ewald basati su mesh. La genesi dei metodi della "rete di particelle" (come PPPM e la rete di particelle levigata Ewald) risiede nelle simulazioni di galassie per l'astrofisica; la connessione con le accuse è stata un effetto collaterale involontario (che è appena successo alla fine ha superato l'utilizzo originale).
Più recentemente, ci sono state anche pubblicazioni sui metodi di sommatoria multilivello che sono simili nello spirito ai metodi multipolari veloci e alla Barnes-Hut, ma possono offrire vantaggi in diverse circostanze (geometrie più generali e flessibili, alcuni guadagni di efficienza, ecc.).
Per il classico problema gravitazionale di n-body , penso che i seguenti due lavori facciano un buon lavoro nel discutere le viscere dell'attuazione parallela per la fase di valutazione della forza. Sebbene gli articoli discutano un'implementazione della GPU, fanno un buon lavoro nel discutere il parallelismo e forniscono dettagli sugli algoritmi:
Questo articolo di Nyland, Harris e Prins presenta l'algoritmo n-body diretto in CUDA per GPU.
Questo altro articolo di Yokota e Barba discute bene del treecode e dell'algoritmo multipole veloce anche nel contesto del GPU-computing
Le tue domande sull'accuratezza delle simulazioni numeriche n-body sono un po 'più coinvolte e ci sono così tanti dettagli importanti che una risposta può generare diversi libri. Penso che la cosa migliore da fare sia darti un paio di riferimenti a libri. Suggerisco:
Simulazioni gravitazionali di N-body di Sverre J. Aarseth
Simulazioni al computer usando particelle di Hockney e Eastwood. (Spiacente, nessuna versione pdf)
Se hai bisogno di un approccio di implementazione semplice che non sia ottimale in senso asintotico, potresti prendere in considerazione l'uso di operazioni di comunicazione a tutto campo. Poiché ciascuno degli N-body ha bisogno di conoscere l'effetto gravitazionale degli altri corpi, è importante che ogni processore conosca l'intero set di dati. Questo è ciò che fanno tutte le operazioni di raccolta. C'è un buon libro: Programmazione parallela in C con MPI e OPENMP di Michael J. Quinn (2004) che discute esattamente questo argomento a pagina 82. Potrebbe valere la pena dare un'occhiata per iniziare.