2. 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 ParticleSimulation (nebo N-body simulation)
3. 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
4. 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ů
5. Hierarchické stromové metody Vynalezeny v roce 1985 3 hlavní problémy: Load – balance Komunikace mezi procesory Programování instrukcí pro komunikaci mezi procesory
6. 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 (processordomains), 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
7. 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
8. 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í
10. Classified V roce 2002 Los AlamosNationalLaboratory 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 „LibraryWithoutWalls“ Naštěstí většina reportů byla získána a uložena Gregory Walkerem a CareySublette 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ů
11. Cíle Cílem byl „friendlycode“ 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
12. 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
13. 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)
14.
15. Buňky obsahující 1 částici se nedělí – jsou to listy stromu, oblasti bez částic se ignorují
16. 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
20. 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
21. 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
26. 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)
27. 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
28. 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 rozjezdu
29. Výkon 1997, Gordon Bell performance prize, účastník ASCI Red, SandiaNationalLaboratory 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 AssociationforComputingMachinery - http://awards.acm.org/bell/