Vyvoj v case

Obsah

Jeste pred prechodem na vlastni vypocet je tu maly benchmark inicializacniho vypoctu na 11 strojich:

Metoda  \  Pocet procesu
3
5
6
8
10
11
Metoda 2
842 s
701 s
287 s
862 s
350 s
331 s
Metoda 3
658 s
459 s
228 s
277 s
179 s
168 s

Metoda 2 zcela dle ocekavani neni schopna zajistit ani vzdalene linearni narust vykonu a dokonce vykazuje lepsi vysledky na 6 procesech nez pri 11!!! Jeste propastnejsi je rozdil mezi pouzitim 6 a 8 pocitacu - prestoze pouzijeme k vypoctu o dva pocitace vic, tak vypocetni doba se prodlouzi temer na trojnasobek.  Mensi ztratu vykonu je mozno v teto situaci pozorovat i pri treti metode. Duvodem je, ze pri rozdeleni na 6 procesu mu to vyjde hezky na dvojice, zatimco pri 8 uz se vic prekryvaji a musi vic cekat. Podstatnym vysledkem mereni je skutecnost temer linearniho rustu vykonu u metody 3, ktera se timto stava nas lidr do budoucna.


Vyvoj v case

Pochopitelne jsem zacal vypoctem zadaneho evolucniho vzorce. Zadny vetsi problem se snad ani nemohl vyskytnout, a tak je vzoreckova cast jiz napsana. Zacal jsem vypoctem vyhradne urcenym pro narrow band - tedy s vyuzitim cache bloku (a proto nejde pouzit pro normalni bodovy vypocet). Resp. pujde pouzit, ale bude se muset cely prepsat na jine promenne. Bude tu celkem velka redundance kodu, proti ktere jsem dosud velice uspesne bojoval. :-( Smula. Snad me jeste neco napadne jak zachovat rychlost a nemuset cele bloky kodu psat kopi-end-pejst stylem.

Duvod, proc tu nejsou zatim vysledky je jednoduchy - narazil jsem na problem s postupem. V pripade, za se krivka bude v jedne vzdalene casti blizit k jine casti zhruba rovnobezne a ve vzdalenosti pul naseho pokryvajiciho bloku (tufiz na jeho hrane), tak program bude velmi nepresny eventualne nebude schopen zjistit, kdy reinicializovat.. V jednom procesu tam bude sice presna hodnota, ale druhy bude na stejnych polich pocitat uplne zcestne.

Reseni:
  1. Synchronizovat procesy na urovni mensich pokryvajicih bloku. V podstate na bazi, ze se body na krajich bloku nebudou aproximovat, ale budou se hledat procesy, ktere tento bod maji. Hezke, ale pravdepodobne extremne narocne na vypocet (pomerne i na implementaci). Na teto myslence jsem jiz zacal pracovat...
  2. Zmenit pokryvaci strategii. Zacit stejne jako nyni, jen neskoncit po prvnim pruchodu a zkusit najit dalsi body, ktere patri do naseho ramce. Je podstatne jednodussi. Neresi ale problem s aproximaci na krajich bloku.
Do dalsiho vyvoje se pustim az s trochu rozmyslenou strategii (tzn. po vikendu), protoze se mi to u predchoziho programovani zatim vzdy velice vyplatilo. O cemz svedci i temer nulova redundance kodu pro pripady NarrowBand a Bodoveho pocitani primo na matici.

Informace o clusteru
: Petr je (snad az prilis :-) ) aktivni, a tak je cluster odladen pro normalni pouziti. Zatim nefunguje jednoduche bootovani bez potreby nastavovani SSH-agenta. To ale nevadi, protoze s touto moznosti jsem ani nepocital a lze jej spustit i tak s jen o neco vetsi praci. Kamilovi jsem v rychlokurzu vysvetlil praci na LAM implementaci MPI a domluvili si prvni spolecny zazeh, predbezne na ctvrtek cca. 14.11. vecer. To jen, abysme zbytecne nepousteli pocitace pres noc jen pro jednoho. Zaroven je jiz odladeny skriptik na detekci bezicich pocitacu i samotne spusteni clusteru (ten se zprovoznenim bezagentoveho zpusobu stane zbytecnym). Protoze mi bylo tak trochu hloupe Petrovi stale pridelavat praci jeste s clusterem, tak jsem se s nim domluvil na pomoci pri sprave.

Jak uz jsem nekolikrat psal, veskery svuj volny cas jsem venoval hledanim chyby v programu, takze davam jen ilustracni obrazky, ktere sice vypadaji pekne, lec jsou spatne. :-(

Line evolution
State anim


Update k 28.11.

Kvuli podezreni, ze by vypocet nakonec nemusel byt spatny, a tudiz bych eventualne poslednich 10dni stravil hledanim neexistujici chyby, byl proveden nasledujici test na casovem rozliseni 1e-7. Pocatecni polomer R=0.25, cas vymizeni tedy 0.03125. Velikost prostoroveho kroku 0.01. Cerne body znazornuji zhruba napocitane hodnoty, modra presne reseni.

Line0
Cas 0.00
Line1
Cas 0.01
Line2
Cas 0.02
Line3
Cas 0.0312

Pokus zopakovan za jemnejsiho prostoroveho rozliseni (0.004) a horsiho casoveho (1e-6).

Evol1
Cas 0.00
Evol2
Cas 0.01
Evol2
Cas 0.02
Evol4
Cas 0.0312


Za vydatne podpory Martina Petreka a jeho vizualizacniho programku Phase Field Visualizer v0.01 se podarilo lepe zobrazit vyvoj  distancni fce. Time v zahlavi udava hodne nespecificke oznaceni iterace... :-) Na oprave se pracuje...

evol2
(Martin Petrek Phase Field Visualizer)
Evol2
(Martin Petrek Phase Field Visualizer)

(Martin Petrek Phase Field Visualizer)

(Martin Petrek Phase Field Visualizer)


Pevne verim, ze nasledujici ukazka je projevem nestability pri prilis hrube casovem kroku (dT > 1e-5). Pri jemnejsim kroku vymizi...

Col0
Iterace 0
Col2
Iterace 2
Col4
Iterace 4
Col4
Iterace 8


Dalsim krokem bylo porovnani mezi zpracovanim narrowbandu bodove a blokove. Idea je, ze se blok vleze do L1 cache pameti kompu a tudiz by vypocet mel byt rychlejsi. Nedostatek: Testovane bloky jsou prilis male, a tak se pripadny narust vykonu neprojevi, protoze se vyrovnavaji kopirovanim do "cache" a zpet. Vysledky nejsou prukazne kvuli malemu objemu dat (a tudiz malemu rozdilu).

Zpracovani\Krok, velikost bloku v bodech
0.01, 30
0.005, 2x40
Bodove zpracovani
63s
179s
Blokove zpracovani
61s
172s


8.12.2002 Late Night Update (resp. 9.12. Early Morning...)

Byla provedena dalsi serie pokusu na hyper-2-procesorovem clusteru na koleji (Athlon 1700+XP a Athlon 1.33 GHz). Nejpodstatnejsi vysledek je stale to, ze nejvlivnejsi faktor ovlivnujici rychlost vypoctu je rychlost prenosu dat. Pri mrizce cca. 0.01 x 0.01 jsou procesory vytizeny tak na 40% a doba vypoctu se prodluzuje oproti jednomu procesu. :-( Zvetsi-li se mrizka na krok 0.001, dostaneme se na vytizeni kolem 90%, coz uz se da vydrzet. Snad se mi podari vymyslet synchronizacni cast nejak efektivneji (synchronizovat napr. kazde 2 kroky vetsi oblasti, nebo vyuzit ulozeni radku v pameti za sebou a pouzit memcpy pri priprave bloku na poslani...). Dalsim poznatkem je, ze pouzivane casove kroky cca. e-5 jsou opravdu na hranici stability schematu (vzhledem k prostorovemu kroku). Tato se neprojevuje tak vyrazne jako vyse uvedena, ale projevi se rozvlnenim krivky a postupnym rozplyvanim. Jako pouzitelne rozliseni pro prostorovy krok 0.001 se jevi casovy krok aspon 5e-7.

Dale jsem slibil ukazku vyvoje asteroidy, ktere se uz vali... Kruznice tam sice nebyla nechana umyslne, ale kdyz uz tam je, tak ji lze oduvodnit jako objekt k porovnani s predchozimi experimenty. :-) Vypada to, ze uz budu muset to vykreslovatko udelat trochu poradne.

Cas0
Cas 0.0000

Cas 0.0011

Cas 0.0025

Cas 0.0050

Po teto hladine se smrskne korektne do jednoho bodu. Tak toto byla jen mala vsuvka a prejdeme k dalsi casti a tou je priprava na reinicializaci...