Upload
shellie-fisher
View
38
Download
0
Embed Size (px)
DESCRIPTION
Stromové kódy. Jakub Havlík a Milan Holec. Nástin problému. Výběr vhodného algoritmu při simulacích mnoha částic Částice – částice anebo částice – síť? Když částice – částice, tak jaký algoritmus? Není zbytečné simulovat interakce všech částic se všemi částicemi? - PowerPoint PPT Presentation
Citation preview
Stromové kódyStromové kódy
Jakub Havlík a Milan HolecJakub Havlík a Milan Holec
Nástin problému
• Výběr vhodného algoritmu při simulacích mnoha částic• Částice – částice anebo částice – síť?• Když částice – částice, tak jaký algoritmus?• Není zbytečné simulovat interakce všech částic se všemi
částicemi?• Odpověď : „Ano je. Všechno jde dělat chytře místo
složitě“
Proč stromové algoritmy
• Základní myšlenka:
Máme-li velkou skupinu částic, která je velmi vzdálená od ostatních částic, pak silový příspěvek této skupiny můžeme aproximovat silovým příspěvkem jedné částice s hmotnosti rovnou součtu hmotností částic ve skupině a s hmotným středem umístěným v hmotném středu skupiny částic.
Schéma rádiusu buňky
První příklad
• Pro velikou vzdálenost obou skupin částic a malé úhly theta se nevyplatí provádět všechny čtyři interakce červená-modrá, červená-červená, modrá-červená, modrá-modrá, ale jak je znázorněno vedle rozdělíme simulovanou plochu na čtyři kvadranty a napočítáme pouze dvě interakce modrá-červená a červená-modrá.
Konstrukce stromu
• při konstrukci stromu nejdříve uzavřeme prostor částic do čtverce (obdélníku), který je dostatečně velký, aby v něm částice během celé simulace zůstaly – root cell
• poté začneme čtverec dělit na menší a menší pravoúhelníky
• simulací v 1D tak z rodičovské buňky vzniknou dvě stejné děti – dvě buňky – binarytree, ve 2D vzniknou 4 buňky (obvykle čtverce) – quadtree a ve 3D z jedné rodičovské buňky vznikne 8 menších, každá o objemu 1/8 rodičovské buňky – octtree
• takto postupujeme rekurzivně tak dlouho, dokud nemáme každou částici zvlášť v jedné buňce
Základní názvosloví
• Definice oblasti:Oblast je část simulované plochy a to vždy část obdélníková. Je rozdělena na 4 kvadranty. Tato oblast může a nemusí být nadále rozdělena na další 4 pod-oblasti, každá podle příslušného kvadrantu. První oblastí je celá simulovaná plocha.
• Definice listu:Listem rozumím poslední oblast stromu, na které už nenavazují žádné další oblasti.
Vysvětlující obrázky
Quadtree - každý uzel se
rozdělí na 4 stejné poduzly
Quadtree – prostor dělímetak dlouho, dokud není každáčástice v buňce sama
Výpočty – část 1
• Celková hmotnost a umístění hmotného středu je jednoduché pro listy – je to přesně ta hodnota a pozice částice uvnitř listu
• Pro uzly jsou tyto hodnoty určeny z jejich subbuněk ale pouze pro první úroveň! ( pro 2D jsou tak tyto hodnoty určeny ze 4 subbuněk, ve 3D z 8)
Výpočty – část 2
• Teď už můžeme počítat interakce částic – ty budou dvou druhůa) výpočet silových příspěvků od individuálních částic, které jsou blízko
naší částicib) výpočtem silového příspěvku od hmotného středu sady buněk stromu,
které jsou velmi vzdálené od naší částiceTo, jestli vybereme metodu a nebo b záleží na parametru ca, který je
pevně zvolen
• Při výpočtu interakcí postupujeme od kořene rekursivně k poduzlům a listům.
• Pro snížení výpočtů je dovoleno, mít na každé úrovni jen maximálně 9 buněk, které potřebují dále rozdělit. Výpočet další úrovně se pak redukuje na 27 operací (2*3*2*3-9). Na každé úrovní je pak výpočetní náročnost 27 O(1).
Zhodnocení
• hloubka stromu je určena jako min(b, log(n)) a celková náročnost je tedy
O(n min(b, log(n)))• toto zjednodušení dokáže velmi zredukovat počet
výpočtů až o několik řádů !!! (v závislosti na počtu částic)
• stromové kódy jsou přesnější než metoda částice – síť, ale méně přesné než metoda částice – částice
• vyžadují navíc pomocné uskladnění dat• Algoritmus Barnes – Hut využívá stromové struktury a je
hojně užíván zejména v astrofyzice
Dodatek 1 – Barnes - HutAlgoritmus1. Vytvoř quadtree nebo octtree 2. Postupuj ve směru od listů ke kořeni a počítej hmotnost a hmotný střed
pro každý uzel3. Postupuj směrem od kořene k listům a pro každou částici spočítej sílu
během postupu
Bod 2 můžeme schématicky rozepsat:
Počítej aproximace (N) pokud N je list pak konec; pro každý subuzel n uzlu N proveď -> počítej aproximace (n) M:=0, cm:= (0,0) Pro každý subuzel n uzlu N proveď
M:=M + hmotnost n, cm:= cm + hmotnost n*pozice nkonec
cm:=1/M *cm Hmotnost N := M Pozice N := cmkonec
Dodatek 2 – Paralelní výpočty
• Problém mezi komunikace částic mezi procesory• Malá datová propustnost může být problém mezi počítači
s malou pamětí• Vytvoří se lokální stromy na každém procesoru• A posílají se pouze základní informace o stromech• Velice výhodné při počítání obrovského počtu částic (až
109.• Ukázka klíče buňky(listu)
Odkazy
http://ocw.mit.edu/NR/rdonlyres/Mathematics/18-337JSpring-2005/7F272796-9A83-44EF-AF25-0366CA296EA4/0/chapter_9.pdfhttp://www.cita.utoronto.ca/~dubinski/treecode/natreecode.pdfhttp://www.sweb.cz/labirlab/plasma/tree_cods.htmhttp://chaos.swarthmore.edu/research/Tree_Codes.pdfhttp://library.lanl.gov/cgi-bin/getfile?00326635.pdfhttp://www.amara.com/papers/nbody.html#tcuhttp://delivery.acm.org/10.1145/370000/369033/a2-hu.pdf?key1=369033&key2=3073965021&coll=GUIDE&dl=GUIDE,ACM&CFID=59550468&CFTOKEN=38354691 http://library.lanl.gov/cgi-bin/getfile?22-09.pdf http://www.cs.berkeley.edu/~demmel/cs267/lecture26/lecture26.htmlhttp://www.cita.utoronto.ca/~dubinski/treecode/treecode.html