26
TREE CODES Miloslav Pekař

Tree Codes

Embed Size (px)

DESCRIPTION

Tree Code for N-Body Problems

Citation preview

Page 1: Tree Codes

TREE CODESMiloslav Pekař

Page 2: Tree Codes

PROČ?

Spojité fyzikální problémy musí být diskretizovány, ve skutečnosti nemáme mnoho možností

Diskretizace pomocí konečných diferencí nebo konečného počtu elementů je vhodná pouze pro diferenciální rovnice nejvýše 3D

Např. Boltzmannova bezesrážková rovnice:

6 nezávisle proměnných, diskretizace domény se 100 elementy v každé dimenzi by vedla na systém s 1012 elementů

Přejdeme k Particle Simulation (nebo N-body simulation)

0),,(),,(),,( tvxfatvxfvtvxf vxt

Page 3: Tree Codes

N-BODY SIMULATION

Prostoročasová hustota f je reprezentována shlukem „částic“ (particles) nebo „těl“ (bodies), která se vyvíjí v čase podle dynamiky newtonowské gravitace:

Takovouto diferenciální rovnici můžeme řešit mnoha metodami, problém je, že přímá implementace pravé strany vyžaduje O(N2) operací

Simulace využívající přímou sumaci jsou tudíž vhodné jen pro několik desítek tisíc částic, nepomohou ani teraflopové stroje, které zvýší výkon jen o zhruba řád

jiijij

ij

ijj

ijij

i xxdd

dGma

dt

xd

,32

2

Page 4: Tree Codes

VÝPOČETNÍ ČAS

Protože gravitace je „síla s dlouhým dosahem“ (klesá pouze jako čtverec vzdálenosti), bylo by nutno počítat silové působení mezi každými 2 částicemi v každém časovém kroku → (N – N2) / 2 párů

Naštěstí existují aproximativní metody, známé jako hierarchické stromové metody, které redukují čas nutný pro výpočet sil z O(N2) na O(N∙log N) nebo i na O(N), což je výborné, uvážíme-li, že N jde do miliónů

Page 5: Tree Codes

HIERARCHICKÉ STROMOVÉ METODY

Vynalezeny v roce 1985 3 hlavní problémy:

Load – balance Komunikace mezi procesory Programování instrukcí pro komunikaci mezi

procesory

Page 6: Tree Codes

LOAD – BALANCE

Rozdělení problému do částí podle počtu procesorů

Každá část musí zabrat zhruba stejně výpočetního času

Standartně rozdělení na procesorové domény (processor domains), každý procesor provádí výpočty ve své doméně

Protože v kosmologických simulacích jsou částice rozloženy nepravidelně, je težké dělit na oblasti s zhruba stejným počtem částic

Navíc, protože se částice pohybují jedna vzhledem ke druhé, rozdělení, které bylo na začátku load – balanced, takové nemusí zůstat

Page 7: Tree Codes

MEZIPROCESOROVÁ KOMUNIKACE

Nejpopulárnější paralelní počítače využívají distribuovanou paměť (každý procesor má svoji paměť, kde ukládá data své domény)

Komunikace mezi procesory je pomalá, naneštěstí, protože studujeme síly dlouhého dosahu, relativně husté komunikaci mezi procesory se nevyhneme

Pokud není meziprocesorová komunikace minimalizována, program poběží mnohem déle

Page 8: Tree Codes

KOMUNIKAČNÍ INSTRUKCE

Tyto musí být psány explicitně programátorem, protože výpočty pro částice ve stromových kódech závisí na tom, kolik částic je v okolí

Page 9: Tree Codes

FAST TREE CODE FOR MANY – BODY PROBLEMSLos Alamos Science, November 22, 1994

Page 10: Tree Codes

CLASSIFIED

V roce 2002 Los Alamos National Laboratory ukončila přístup k tisícovkám veřejných reportů, které byly volně přistupné na stránkách laboratoře v rámci projektu „Library Without Walls“

Naštěstí většina reportů byla získána a uložena Gregory Walkerem a Carey Sublette

Jedním z těchto reportů je i magazín Los Alamos Science, konkrétně vydání z 22. listopadu 1994 s titulem High Performance Computing, popisující použití „klíčového schématu“ k překonání problémů stromových kódů

Page 11: Tree Codes

CÍLE

Cílem byl „friendly code“ a vysoká modularita programu (kažý výpočet provádí samostatná část programu)

Začínalo se „od píky“, nemodifikovaly se stávající nepřehledné kódy – časová náročnost

Nicméně úsilí se vyplatilo, díky modularitě lze zaměnit část popisující např. gravitační působení za modul jiný, přitom se vědec nemusí zabývat částí provádějící paralelní počítaní – vysoká adaptivita

Další výhodou je portabilita – např. moduly pro input-output a meziprocesorovou komunikaci mohou být měněny v závislosti na použitém stroji nebo systému

Page 12: Tree Codes

METODA STROMU Struktura programu je velice jednoduchá Nejprve se počítá celkové silové působení okolních

částic na danou částici Z této síly se počítá pozice a rychlost Tato procedura (timestep) se opakuje dokud je třeba Metoda stromu je jedna z cest jak využít výhodu

základní aproximativní metody – multipólového rozkladu

Skupina částic v určité vzdálenosti působí silově stejně jako jedna velká částice v těžišti skupiny

Pokud je ale skupina částic blízko k částici, vzhledem ke které počítáme silové působení skupiny, je toto přiblížení méně přesné

Je možné použít vyšší členy multipólového rozkladu ke zvýšení přesnosti

Page 13: Tree Codes

VYLEPŠENÍ

Vylepšujeme přiblížení využitím základní myšlenky stromových kódů: problém rozdělíme na skupiny a ty na další skupiny, atd.

Každá z menších skupin může být považována za jednu částici

Při výpočtu silového působení je třeba skupinu rozdělit dostatečně jemně, abychom dostali požadovanou přesnost, ale ne příliš jemně, abychom se vyhnuli zbytečným výpočtům

Abychom rozdělili skupinu efektivně pro každou částici, sestavíme „strom“ – hierarchii jemnějšího a jemnější úrovně rozdělení a pak vybereme nejhrubší akceptovatelnou úroveň (z hlediska přesnosti)

Page 14: Tree Codes

2D STROM Prostor je rozdělen

hierarchicky na strom buněk

Buňky obsahující 1 částici se nedělí – jsou to listy stromu, oblasti bez částic se ignorují

Buňky jsou čtverce a jsou děleny ortogonálně přes střed, čili každá může mít maximálně 4 dceřiné buňky, proto se užívá označení quad-tree

Struktura se musí přepočítat při každé změně pozice částice

3D verze je oct-tree

Page 15: Tree Codes

MULTIPOLE ACCEPTANCE CRITERION (MAC) Kód musí obsahovat kritérium, kdy je možné

pohlížet na skupinu částic jako na makročástici v těžišti skupiny a kdy ne

Minimální vzdálenost se označuje jako kritický rádius, rc

Metoda výpočtu kritického rádiusu je velmi důležitá pro rychlost a přesnost stromového kódu

Při výpočtu silového působení na částici se prochází strom úroveň po úrovni, až je přiblížení přijatelné (zadá uživatel), může skončit až na úrovni jedné částice

Čas na projití stromu je O(N∙log N), toto enormní zrychlení chodu (N je velké) ospravedlňuje nutnost znovu postavit strom při každém časovém kroku

Page 16: Tree Codes

KRITICKÝ RÁDIUS

Page 17: Tree Codes

MAPOVÁNÍ BUNĚK

Popis stromu, který zahrnuje souřadnice každé buňky, jejího těžiště a multipólové momenty, musí také obsahovat informaci, jak nalézt dceřiné buňky

Způsob pomocí ukazatelů (pointers) je nevhodný, protože jednak pozice v paměti, na kterou ukazatel ukazuje nemá nic společného s umístěním částice, a jednak pokud procesor potřebuje informace o buňce z domény jiného procesoru, musí se ukazatele nějak přeložit

2 možnosti: buď si každý procesor nabere veškerá data, která by mohl potřebovat, na začátku programu, a pak pracuje s vlastní kopií stromu, nebo se procesor zeptá jiného procesoru na data až je bude potřebovat

Page 18: Tree Codes

KLÍČ První možnost má též nevýhodu, že je těžké na startu

určit, která data by procesor mohl potřebovat Druhá možnost vyžaduje metodu efektivního „vyžádání

si“ kusu dat od jiného procesoru Za identifikátor každé částice vezmeme klíč, odvozený od

pozice částice, a ten se přeloží do adresy dat buňky pomocí hashingu

Pokud máme klíč částice, můžeme její data rychle nalézt, i u jiného procesoru – klíčové schéma představuje uniformní adresovací systém

Můžeme nalézt jakoukoli větev stromu v čase O(1) (nezávislé na N), oproti O(N∙log N) při použití ukazatelů, kde musíme projít strom od kořenu

Pokud srovnáme částice podle velikosti jejich klíčů, budou částice s hodnotou klíče poblíž sebe také blízko sebe ve skutečnosti

Page 19: Tree Codes

KLÍČE BUNĚK

Page 20: Tree Codes

ORGANIZACE PROGRAMU

Po inicializaci programu (nastavení výchozích pozic a rychlostí částic) jsou další části prováděny paralelně

Proces je opakován podle požadavku uživatele, obvykle stovky až tisíce časových kroků

Page 21: Tree Codes

PARALELNÍ DEKOMPOZICE DAT

Velice důležitá pro rychlost algoritmu Seznam částicových klíčů rozdělíme podle

počtu procesorů Problém je, že do jedné procesorové domény

takto mohou spadnout dvě vzdálené skupiny částic, ovšem eliminace tohoto problému neukázala výrazné zrychlení algoritmu

Page 22: Tree Codes
Page 23: Tree Codes

KONSTRUKCE STROMU

Seřazené klíče jsou výhodou V obvyklém algoritmu pro konstrukci stromu

je částice vložena do kořene (nejvyšší úroveň stromu)

Částice postupuje dolů po větvi dokud není vytvořena nová buňka, která bude jejím listem

Tento proces je O(log N) pro každou částici V našem algoritmu jsou částice přidány do

stromu tam, kde byla přidána poslední částice, protože blízkost v seznamu značí i blízkost ve skutečnosti, přesun částice na danou pozici je řádu O(1)

Page 24: Tree Codes

VÝKON

1992, klasický stromový kód (před modifikací v Los Alamos)

Stroj Intel Touchstone Delta, 512 procesorů 17,15 milionů částic, 0,5Gflops Ačkoli nám to nepřipadá jako velký výkon,

vyhrál tento výpočet soutěž Gordon Bell Performance Prize 1992

Page 25: Tree Codes

VÝKON

Stroj Intel Touchstone Delta, 512 procesorů, 1994

8,8 milionů částic, střední kvadratická odchylka zrychlení < 10-3

2,2 ∙ 1020 interakcí za časový krok při rozjezduVýpočetní fáze Čas (s)

Domain Decomposition 7

Tree Building 10

Tree Traversal 33

Data Communication 6

Force Evaluation 54

Load Imbalance 7

Total (5,8 Gflops) 114

Page 26: Tree Codes

VÝKON 1997, Gordon Bell performance prize, účastník ASCI

Red, Sandia National Laboratory O(N2) metoda – 635 Gflops na 6800 procesorech, 1 milion

částic O(N∙log N) metoda – 430 Gflops na 6800 procesorech,

322(!) milionů částic – 105 krát efektivnější než O(N2) metoda

1996, dva stroje z Los Alamos, Loki a Hyglac, postaveny pouze z běžných komponent, 16 procesorů každý, třída Beowulf, dosáhly při běhu gravitačního stromového kódu poměru 50$/Mflop

2. 9. 2009 – Oct-tree metoda realizovaná za použití GPU, cena systému 900$, 2,8 milionu částic, 21,8 Gflop – 41,6$/Gflop, současný rekord

Association for Computing Machinery - http://awards.acm.org/bell/