TREE CODESMiloslav Pekař
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
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
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ů
HIERARCHICKÉ STROMOVÉ METODY
Vynalezeny v roce 1985 3 hlavní problémy:
Load – balance Komunikace mezi procesory Programování instrukcí pro komunikaci mezi
procesory
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
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
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í
FAST TREE CODE FOR MANY – BODY PROBLEMSLos Alamos Science, November 22, 1994
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ů
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
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
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)
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
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
KRITICKÝ RÁDIUS
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
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
KLÍČE BUNĚK
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ů
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
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)
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
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
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/