Come si può risolvere il problema gravitazionale di n-body in parallelo?


Risposte:


27

Esiste un'ampia varietà di algoritmi; Barnes Hut è un popolare metodo e il metodo multipolare veloce è un'alternativa O ( N ) molto più sofisticata .O(NlogN)O(N)

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 .


2
BH, chiamato anche un codice ad albero, sembra essere preferibile con bassa precisione. Ecco un documento in cui i metodi sono combinati in modo adattivo, ma non ho ancora visto questo lavoro in pratica.
Matt Knepley,


8

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.).


8

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)


4

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.


3
O(n2)

È vero. Sebbene, come ho affermato in precedenza, questa è un'implementazione semplice, non necessariamente efficiente.
Paolo

+1 in qualche modo tutte le altre risposte presuppongono che l'OP sia alla ricerca di prestazioni tera o petascale. FMM e affini hanno senso solo in contrasto con approcci più ingenui.
Stefano M,

1

Vedi Google Scholar e cerca riferimenti a HACC e GADGET, tra gli altri codici.


2
Potresti aggiungere qualche dettaglio in più sul motivo per cui consigli HACC e GADGET?
Paul

1
Sono entrambi codici cosmologici di alto profilo che includono solutori di gravità.
Jeff,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.