SlideShare a Scribd company logo
1 of 26
Download to read offline
Treecodes Miloslav 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 ParticleSimulation (nebo N-body simulation)
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
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 (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
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í
FastTreeCodefor Many – Body Problems Los Alamos Science, November 22, 1994
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ů
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
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 ,[object Object]
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,[object Object]
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 ,[object Object]
Proces je opakován podle požadavku uživatele, obvykle stovky až tisíce časových kroků,[object Object]
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)

More Related Content

Viewers also liked (19)

Atomic codes PDF
Atomic codes PDFAtomic codes PDF
Atomic codes PDF
 
Powerpoint koe anton_sutinen
Powerpoint koe anton_sutinenPowerpoint koe anton_sutinen
Powerpoint koe anton_sutinen
 
celulas madres y usos
celulas madres y usoscelulas madres y usos
celulas madres y usos
 
OEE Yönetim Programı
OEE Yönetim ProgramıOEE Yönetim Programı
OEE Yönetim Programı
 
Goodbye to berlin (slideshare)
Goodbye to berlin (slideshare)Goodbye to berlin (slideshare)
Goodbye to berlin (slideshare)
 
Kısıtlar Teorisi
Kısıtlar TeorisiKısıtlar Teorisi
Kısıtlar Teorisi
 
Final Multicultural Awareness Portfolio
Final Multicultural Awareness PortfolioFinal Multicultural Awareness Portfolio
Final Multicultural Awareness Portfolio
 
Neutralizing SQL Injection in PostgreSQL
Neutralizing SQL Injection in PostgreSQLNeutralizing SQL Injection in PostgreSQL
Neutralizing SQL Injection in PostgreSQL
 
PostgreSQL: How to Store Passwords Safely
PostgreSQL: How to Store Passwords SafelyPostgreSQL: How to Store Passwords Safely
PostgreSQL: How to Store Passwords Safely
 
Alzheimer
AlzheimerAlzheimer
Alzheimer
 
Cadre et Pratiques de Communication Financière (2013)
Cadre et Pratiques de Communication Financière (2013) Cadre et Pratiques de Communication Financière (2013)
Cadre et Pratiques de Communication Financière (2013)
 
Internet en Chine 2013
Internet en Chine 2013Internet en Chine 2013
Internet en Chine 2013
 
1
11
1
 
COQ
COQ COQ
COQ
 
EQ落點分析
EQ落點分析EQ落點分析
EQ落點分析
 
褒揚臺灣傑出旅日藝術家故張義雄先生案
褒揚臺灣傑出旅日藝術家故張義雄先生案褒揚臺灣傑出旅日藝術家故張義雄先生案
褒揚臺灣傑出旅日藝術家故張義雄先生案
 
Strategic Management
Strategic ManagementStrategic Management
Strategic Management
 
Interview skills and tips
Interview skills and tipsInterview skills and tips
Interview skills and tips
 
thaivinh.com
thaivinh.comthaivinh.com
thaivinh.com
 

Treecodes - stromové kódy

  • 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í
  • 9. FastTreeCodefor Many – Body Problems Los Alamos Science, November 22, 1994
  • 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
  • 17. Struktura se musí přepočítat při každé změně pozice částice
  • 18.
  • 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
  • 23.
  • 24.
  • 25.
  • 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/