Perl 6 - the future is here, just unevenly distributed

IRC log for #divine, 2013-04-17

| Channels | #divine index | Today | | Search | Google Search | Plain-Text | summary

All times shown according to UTC.

Time Nick Message
04:33 xstill joined #divine
05:13 xstill joined #divine
06:04 spito joined #divine
08:01 spito joined #divine
08:02 mornfall Bleble.
08:04 spito blemc
08:04 spito a?
08:07 mornfall Nic. Bleble je noop.
08:08 mornfall Zachvíli se vrátim (a se mnou přijde zákon?).
08:17 botton joined #divine
08:17 botton left #divine
08:36 spito joined #divine
11:00 mornfall xstill: Nachystej se, dneska to vidím na pull z tvýho branche do mainlinu. ;-)
11:01 xstill mornfall: nevím jestli bych nejdřív neměl spravit všechny testy
11:01 mornfall To bys měl. ;-)
11:01 mornfall *wink* *wink*
11:01 xstill mornfall: to asi nestihnu dneska
11:01 mornfall Nevadí, opravíš to už v mainline.
11:01 mornfall Nebo někdo.
11:02 xstill no to co je v repozitáři (v3) by mělo fungovat, můžeš to zkusit, dneska tam ještě pošlu n-ární stromy
11:02 mornfall spito: A ty bys pak mohl spravit map a owcty.
11:03 xstill už jsou skoro hotové
11:03 mornfall Ten divine začíná být docela nadupanej. :-))
11:04 xstill jenže je tam takový malý problém, že se to kompletně asi nezkompiluje ani na 8GB
11:04 mornfall A já asi začnu tím že napíšu alokátor registrů. To pak rovnou můžem pustit jako 3.1.
11:04 mornfall xstill: No, to je trochu mrzuté. Budeme to muset nějak vykoumat.
11:05 xstill problém je že za každý genrátor přibydou 2 story (protože stromová tabulka je závislá na generátoru)
11:05 mornfall Aha. Hm.
11:05 mornfall To se bude muset vymyslet nějak hrozně moc líp. :-)
11:05 mornfall Jen nevim jak.
11:06 mornfall Hm. Ale vždyť všechny story jsou závislé na generátoru.
11:06 mornfall Protože Node.
11:07 xstill no ale ne tabulka
11:07 xstill nevím prostě to bouchá
11:07 mornfall Uvidíme.
11:07 mornfall Nastuduju až budu mít to RC hotový.
11:07 xstill nevíš jestli mají timed nejakou novou optimalizaci tak za poslední měsíc?
11:10 mornfall Thu Mar 21 19:41:33 CET 2013  Jan Havlicek <xhavlic4@fi.muni.cz> * Timed: Turn the LU reduction on by default
11:10 mornfall Tohle je jedna možnost.
11:11 mornfall Ale předtím byla natvrdo zaplá. Jen se jinak chovaj timelocky.
11:11 mornfall Jo, a LTL3BA je off by default asi týden.
11:12 xstill ok
11:27 spito mornfall: jo, opravím to, ale až dám dohromady zvětšovanou tabulku
11:56 spito mornfall: skoky po cacheline si představuješ tak, že se hash zarovná dolů na násobky cacheline a pak pak se vždycky koukne na n prvků v cacheline, pokud to je plné, tak kvadraticky skočí na další cacheline?
12:23 mornfall spito: Tak něco, jo. :)
12:23 mornfall Ten vzorec ideálně zachovej co tam je.
12:23 mornfall Pro tu kvadratickou část.
12:50 spito jo, ten se zachová, jenom se to bude přepočítávat
12:59 xstill mornfall: v branch31 není kompletní mainline (tak týden) možná ti vzniknou konflikty pokud to budeš tahat dřív než to nahraju
12:59 mornfall Ok. Uvidíme.
12:59 mornfall Kdyžtak se ozvu kdybych potřeboval helfnout.
13:01 xstill no a nebo pokud to jen trochu pude tak já tam dneska pošlu novou stromovou komoresi a zintegruu to
13:27 xstill mornfall: unix našel nějaký náš starý server
13:28 mornfall lol
13:28 mornfall Někdo by mohl zrecyklovat interní disky aspoň.
13:29 mornfall Nebo teda, já nevim co všechno kompromitujícího na nich může být.
13:31 xstill no psali na paradise-supp jsetli ho můžou zlikvidovat
13:31 mornfall Jo vidim.
13:31 xstill by možná chtělo říct jim že se na něj nejdřív podívám
13:31 xstill e
13:31 xstill co to má být za stroj?
13:31 mornfall 4U rackmount
13:32 mornfall Co je uvnitř už si nepamatuje asi nikdo.
13:32 mornfall Nějaký P4 Xeony řekl bych.
13:32 mornfall Supermicro skříň a mobo.
13:33 mornfall spito: Jo, dej si pozor abys po prvním skoku nekoukal na stejnou cacheline. :-)
13:33 mornfall Zbytečně.
13:33 mornfall spito: A ideálně tu indexovací funkci vytáhni a použij stejnou pro hashset aj sharedhashset.
13:35 xstill mornfall: tak jim řekneme, že ho chceme nejdřív vidět?
13:48 spito mornfall: asi jsem našel chybu v závislostech - umřela mi čistá kompilace na 6 vláknech při problému s tbbmalloc
13:49 spito [  9%] make[3]: stat: ../external/tbbmalloc/backend.cpp: Device or resource busy
13:49 spito make[3]: *** Building CXX object wibble/CMakeFiles/wibble.dir/test.cpp.o
13:49 spito No rule to make target `../external/tbbmalloc/backend.cpp', needed by `external/tbbmalloc/CMakeFiles/tbbmalloc.dir/backend.cpp.o'.  Stop.
13:49 spito make[2]: *** [external/tbbmalloc/CMakeFiles/tbbmalloc.dir/all] Error 2
13:49 spito make[2]: *** Waiting for unfinished jobs....
13:49 spito make[3]: stat: ../wibble/exception.cpp: Device or resource busy
13:49 spito make[3]: *** No rule to make target `../wibble/exception.cpp', needed by `wibble/CMakeFiles/wibble.dir/exception.cpp.o'.  Stop.
13:49 spito make[3]: *** Waiting for unfinished jobs....
13:53 mornfall xstill: Jo, napiš jim pls. Vyřešíme v pondělí spolu s IPMI.
13:54 mornfall spito: Máš to rozbitý.
13:54 spito hehe a ty ne, heč :P
13:54 mornfall spito: No, já ne, to je tvoje VM co se rozbilo.
13:54 xstill mornfall: dobře napíšu
13:58 mornfall spito: Řekl bych žes spíš objevil problém s NFS, když se nad tím tak zpětně zamyslim.
14:16 spito mornfall: co kdyby se uzamykal blob vždycky při načtení z fronty?
14:16 spito nemusely by se pak modifikovat algoritmy
14:17 mornfall Fuj.
14:17 spito ok
14:18 mornfall Zámky nejsou composable, a takovýhle kouzla vždycky nakonec vybouchnou. :)
14:18 spito takže to zamknout při každým přístupu do extension
14:18 mornfall No, začal bych tím že si to zabalim do RAII.
14:19 mornfall (Kdybys ty metody nazval lock/unlock tak můžeš použít std::lock_guard.)
14:19 mornfall Nebo wibble::MutexLock
14:20 mornfall Prostě řekneš std::lock_guard _from_lock( from ); na začátku metody která nebezpečně hrabe na extension od from.
14:20 spito ale ono je potřeba to zamknout pouze s Shared visitorem
14:20 mornfall Jo, takže si musíš vyrobit vlastní RAII třídu.
14:21 mornfall UvnitÅ™ storu asi.
14:21 spito proto bych tohle přehodil na store
14:21 spito to jsem už udělal - guarded, bere to blob a lambdu
14:21 mornfall Nebo alternativně typedef dovnitř storu, buď na Unit nebo na lock_guard.
14:21 mornfall No, Unit ne, ale něco podobnýho, prostě noop třída která má konstruktor co bere Node.
14:24 spito mornfall: s tímhle bys souhlasil?
14:24 mornfall (takže Store::Guard _lock_from( from ); a podle toho co je Store to buď neudělá nic nebo to zamkne/odemkne v ctor-u/dtor-u)
14:25 spito ne
14:25 spito this->store().guarded( t, []( Node t ){
14:25 spito extension( t ).iteration = shared.iteration;
14:25 spito } );
14:25 spito jo, ta lambda je blbě napsaná
14:26 mornfall To bude hrozně škaredý. V Haskellu by to snad šlo, ale v C++ je to hrozně těžkopádný.
14:26 mornfall RAII je mnohem lepší.
14:26 mornfall Navíc teda napsat guarded v podstatě nejde, protože longjmp.
14:26 mornfall Jedině že by to stejně uvnitř používalo RAII.
14:27 mornfall A teda zrovna iteration se vůbec zamykat nemusí.
14:27 spito longjmp?
14:27 mornfall No, throw.
14:27 mornfall Máš pravdu že longjmp rozbije aj RAII.
14:28 mornfall A když máš throw co nejde catch-nout tak je to asi dost jedno.
14:28 spito proč nemusí být iteration zamykaný?
14:28 mornfall Protože shared.iteration je přes všechny vlákna konstanta.
14:28 mornfall Je úplně jedno kdo ji tam zapíše.
14:29 mornfall Aha, není, protože to je bitfield.
14:29 mornfall To by se muselo vykoumat nějak po bajtech.
14:30 mornfall (Pak by se to zamykat nemuselo.)
14:30 mornfall V podstatÄ› by asi uint16_t predCount; uint8_t iteration; uint8_t map_owner; fungovalo.
14:31 spito ono to je jedno, protože tohle se volá v metodě transition, kde by to muselo být celou dobu zamknutý
14:31 mornfall Jestli zamykat nebo odbitfieldovat se asi rozhodni sám.
14:31 mornfall Který transition?
14:32 spito Map::Main::transition
14:32 mornfall No, nestačí to zamčít až na 174?
14:33 mornfall Navíc v map-u je ten bitfield úplně blbě. :D
14:33 mornfall No, nějak to udělej.
14:33 spito super
14:34 mornfall Bylo by to asi lepší bez tý zamykací lambdy, protože to bude spíš bolet než k užitku.
14:35 spito to přiřazení parenta nějak nevadí?
14:35 mornfall Navíc { Store::Guard _lock( x ); ... } je snad i míň škaredý než store.guard( x, [&]( decltype( x ) x ) { ... } )
14:35 mornfall Nevadí, to se přece děje aj v reachability.
14:35 mornfall To je zase jedno kterej parent to vyhraje.
14:36 mornfall Dokud nemůže vzniknout zmíchanina 2 pointrů, což myslim fakt nemůže.
14:36 spito a je jasné, že se to zapíše atomicky
14:36 spito ?
14:36 spito na všech platformách?
14:37 mornfall Já myslim že tohle nemá smysl řešit. :-)
14:37 spito no, jak myslíš
14:37 mornfall Není to jediné místo které by se tím úplně rozbilo kdyby to bylo jinak.
14:37 xstill mornfall: může vzniknout kombinace 2 pointrů protože nejsou zarovnaný na modulo 8
14:37 mornfall xstill: Aha. Hm.
14:38 spito he?
14:38 mornfall spito: extension není zarovnaná.
14:38 mornfall Nebo teda je, ale jen na 4.
14:38 xstill parent je na začátku blobu, poředpokládejme, že blob je zarovnaný, ale jeho hravička je 4 a pak je parent
14:38 spito no, já vím, to bylo napůl posměšné hr
14:38 spito *he
14:39 mornfall spito: To nic nemění na tom, že store to nepomíchá.
14:39 mornfall Na tom je blbý, že v reachability není co před ten parent dát.
14:40 xstill no ono stejně je problém že nevíš jestli je Blob na modulo 8 ne
14:41 mornfall No, víš, nevíš, to by ještě šlo zařídit.
14:41 mornfall Zejména když se udělá Lake tak to bude všechno mnohem jednodušší (mimo jiné nebude potřeba blobheader).
14:41 mornfall No, i když to bude mít zajímavé nové problémy.
14:41 mornfall Protože nevim kam ten lock schováme pak.
14:41 mornfall Asi přímo do extension. :-)
14:44 mornfall Navíc bys mohl hnusně zneužít ten parent pointer, kterej má dva volný bity. ;-)
14:44 mornfall Nebo tak něco.
14:44 mornfall No, ale to je daleko.
14:45 mornfall spito: Máš v zásadě na výběr mezi zamykat aj v reachability, nebo zařídit aby se blob alokoval tak že pointer() % 8 == 4. :-)
14:45 mornfall To druhý bude asi znatelně rychlejší.
14:47 mornfall xstill: Na tom je ale veselý, že ta šance že se to rozbije je fakt mikroskopická, protože to by dva parenty jednoho blobu museli být víc jak 4G od sebe, da?
14:48 mornfall A navíc by se ten blob musel objevit v protipříkladu.
14:49 mornfall (Nemluvě o tom, že ty dva předchůdci se musí zpracovávat ve stejný okamžik.)
14:49 mornfall Zajímavé. Nicméně jak to je je to blbě.
14:52 mornfall Hm.
14:52 mornfall xstill: Ale kecáš. :) 64b store uvnitř cacheline je atomickej bez ohledu na zarovnání.
14:53 mornfall Takže ještě se musí stát, že bloby jsou naskládaný tak, že ten parent pointer padne na hranici cache line (což se může stát, protože není 8-aligned).
14:55 mornfall No nic.
14:55 mornfall spito: Asi tam dej ten zámek. Celý se to pak nějak vyřeší.
14:55 mornfall Alignment taky není zadarmo...
14:57 spito no a je to
14:58 spito a celé to trvalo jenom cca 20 minut
14:58 spito :D
14:59 mornfall spito: Hele, radši moc nepindej, tohle mohlo být klidně před měsícem hotový...
14:59 mornfall Jen mě trochu straší, že zrovna tohle je bug kterej by nikdy nenašel ani divine, o testování ani nemluvě.
15:02 xstill mornfall: no divine to najít nemůže ne protože memory store je atomický
15:03 xstill nebo jak by to měl najít?
15:12 xstill já neumím číst :-D
15:18 spito mornfall: mám spíš použít std::lock_guard, nebo si napsato svoje RAII?
15:23 xstill mornfall: pokud běží SharedHashSet tak tam 1 Pool?
15:32 mornfall xstill: Asi ani ne.
15:32 mornfall xstill: Pool je per thread.
15:33 mornfall xstill: No, nemyslel jsem divine dneska, ale ani divine v podstatÄ› nikdy.
15:34 mornfall xstill: Kdybychom aj implementovali simulaci cache (nějakou), která rozbije zápisy které přesahují dvě cacheline, tak bychom buď museli vypnout redukce, nebo aspoň kontrolovat validitu pointrů po každé instrukci, a to je asi dost nereálný.
15:35 mornfall A navíc teda z principu nemůžeme najít chybu, která se projeví až v momentě, když alokuješ víc než 4G paměti.
15:35 mornfall Hm.
15:36 mornfall Jo, no, protože když jsou ty pointry blíž, tak všechny interleavingy vedou na validní pointry.
15:37 xstill mornfall: no já mám takový problém, že předám do lambdy 1 ona k tomu přičte 1 a pošle to do další funkce, a tam je to najednou 3 miliardy a pak se zavolá pool->allocate a lehne to
15:37 xstill a nestává to pro jistutu jen s optimalizacemi a SharedHashSet
15:37 mornfall xstill: To asi není bug v gdb co?
15:38 mornfall Umírá to na assertu?
15:38 xstill SIGSEGV
15:38 mornfall Nebo teda vidíš že to lehne kvůli tý alokaci jo?
15:38 mornfall (Protože vypisování hodnot v gdb a lambdy dohromady moc nejdou.)
15:39 mornfall xstill: Děje se to i na jednom threadu?
15:39 xstill no já to vypisuju až v té funkci za lambdou
15:39 xstill neděje
15:39 mornfall Hm. To je dost zloba.
15:39 xstill a ono to lehne jinak to nemá proč lehnou na alokaci
15:39 mornfall Jasně no. A není někde něco neinicializovanýho? Valgrind neřve?
15:39 xstill leda by byl rozbytý pool, proto sem se ptal jestli je per-thread
15:40 mornfall Jo, pool musí být per thread. Rozbije se to aj s POOL=OFF?
15:40 xstill teď jsem si uvědomil že ten neoptimalizovaný build má navíc vypnuté pooly
15:40 xstill dám to na valgrind
15:40 mornfall Dej, i když pokud je to race tak valgrind nemusí nutně nic vidět.
15:41 mornfall spito: Nevim, asi lock_guard pokud možno.
15:41 mornfall spito: Jak myslíš.
15:42 spito já bych byl...lepší líbí mi to
15:42 spito se
15:42 mornfall Cože? :-)
15:42 mornfall no parse
15:43 spito to takže češtin být můj kobylek
15:43 mornfall To je lock_guard ano nebo lock_guard ne?
15:43 spito ano tomu z std::
15:43 mornfall Super.
15:43 mornfall No, já si jdu asi zaběhat, dokud je světlo a teplo.
15:44 mornfall Goodluck zatim.
15:44 mornfall (A moc se na mě nezlobte, já dneska vyrábim to RC tak jsem nějakej nevrlej.)
16:35 xstill mornfall: zjistil jsem kde je problém -- já totiž interně alokuju (v tabulce), no a pokud je ta podkladová tabulka sdílená tak potom i ta moje tabulka je sdílená a tedy má jen jeden Pool, no a on se rozseká na tom, že není threads-safe
16:35 mornfall Aha.
16:35 mornfall To je dost mrzuté, no.
16:37 mornfall xstill: Který entrypoint(y) alokujou?
16:37 mornfall (Jestli by jim nešlo ten pool podstrčit jako parametr.)
16:37 xstill no insertHinted alokuje
16:37 xstill teoreticky by to Å¡lo
16:38 mornfall Hm, ty to máš až na úrovni HashSet?
16:38 xstill no jo
16:38 mornfall A nešlo by to teď už liftnout do storu?
16:38 xstill je to tabulka a má i vlastní store
16:39 xstill no tak ona to v podstatě je tabulka, ale zase tabulka a store není takový rozdíl
16:39 xstill mohl bych jí specielně prostě předat pool
16:40 xstill to by bylo celkem rychlé řešení
16:40 mornfall Ono totiž Store přístup k pool-u má.
16:41 xstill jo má a dokonce k tomu který je na správném vláknu
16:42 mornfall :D    394 // ( * -> * -> ( ( * -> * ) -> * -> * ) ) -> * -> * -> * -> *
16:42 mornfall To je teprv kind.
16:42 xstill je to až trochu zvrhlé, ještě se to asi bude muset předělat
16:43 xstill ale až potom
16:44 mornfall JasnÄ›.
18:23 spito joined #divine
18:57 xstill mornfall: Už jsi natahoval branch31? Budu tam posílat nární stomy.
18:59 mornfall Zatím ne.
19:00 xstill dobře, já to tam pošlu
20:20 xstill mornfall: stav mainline k tomuto okamžiku je kompletně i v mém branch31 (v3), takže kdyby jsi to nanahoval tak by neměl být problém
20:21 mornfall Ok. Dojedou testy tak uploadnu tarball a jdu na to.
20:22 xstill se ti divím, že se ti ještě dneska chce
20:22 mornfall Nechce.
20:22 mornfall Ale samo se to neudělá.
20:24 xstill to bohužel ne, no já půjdu dneska spát abych zejtra neusnul na složitosti, kdyby byl nějakej problém s integrací tak mi dej vědět
20:25 mornfall Ok, dobrou.
20:26 xstill díky a dobrou i tobě a ať ti to jde rychle dodělat
20:50 spito left #divine
21:00 spito joined #divine
22:11 mornfall xstill: Pushnul jsem to, unit testy visitor a datastruct nejdou přeložit, ale teď jdu spát. :)
22:11 mornfall xstill: Zítra máš šanci to spravit. ;-)
22:11 mornfall Online budu asi až odpoledne.
22:13 mornfall spito-vi bude do rána vrnět mobil... :D

| Channels | #divine index | Today | | Search | Google Search | Plain-Text | summary