Perl 6 - the future is here, just unevenly distributed

IRC log for #divine, 2014-03-25

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

All times shown according to UTC.

Time Nick Message
09:17 xstill no já ti nevím ale celej ten AtomicCell je podle mě dost divnej
09:18 xstill nehledě na to, že nechápu proč se buňka invaliduje potom co se přesune a ne před tím
09:18 mornfall to je možný, v čem?
09:19 mornfall invalidate nemaže hodnotu, jen ji označí
09:19 xstill tak invalid vrací trvale false, nicméně invalidate něco dělá (= nuluje tag). No a teda is není atomickej.
09:20 xstill no právě, neměla by se ta hodnota označit než se přesune -> kdyby jí někdo našel tak ví, že se přesouvá. takhle teoreticky někdo může zapsat hodnotu po té co se ta buňka otestuje že je prázdná
09:20 xstill ale zase pak by to nemělo fungovat vůbec tak nevím
09:20 mornfall hmm, jo, to by ale mohlo být ono
09:21 mornfall v tom okně kdy je nějaká buňka invalid tak se její duplikát možná povede vložit
09:21 mornfall aha houby
09:22 mornfall is nebylo atomický asi nikdy ale
09:22 xstill no právě pokud je invalid tak výš že se zvětšuje (teda měl bys)
09:22 mornfall (ani nemůže být, musí dereferencovat ten pointr a srovnat obsah)
09:23 mornfall jo, to je pravda, víš
09:23 mornfall ale proč ten invalid() v AtomicCell nic nedělá pravda nevim
09:24 xstill no mě u toho is šlo o to, že můžeš teoreticky invalidovat buňku uprostřed toho, ale s tím se asi na úrovni is nedá nic dělat
09:25 xstill hm, ale hlavně pokud je is špatně tak by to našlo buňku která se zvětšuje, ne vložilo dvakrát
09:26 mornfall no, is by musel selhat opačným směrem
09:26 mornfall teď to nenajde buňku která tam je
09:26 mornfall kdyby to našlo buňku která tam není projevuje se to jinak
09:26 mornfall to že je ta buňka invalid nevadí když tam je
09:26 mornfall ona tam totiž bude aj pak
09:27 mornfall ale to invalid tam je právě proto aby se zamezilo dvojitýmu vložení počas rehashingu
09:27 mornfall ha
09:29 mornfall xstill: jak moc to je reprodukovatelný?
09:30 mornfall bool invalid() { return !value().load().tag(); }
09:30 mornfall return ( hash >> ( sizeof( hash64_t ) * 8 - bits ) ) | 1;
09:30 mornfall tyhle 2 změny by to teoreticky mohly opravit
09:30 mornfall (to druhý je hashToTag, asi nechceme aby to vracelo nulu)
09:31 xstill mornfall: asi tak, že to necháš hodinu běžet ve smyčce při plně zatíženým cpu
09:31 xstill (v release lepší)
09:31 mornfall tomu říkám win :D
09:34 xstill jo to by mělo pomoct
09:34 mornfall (závorky u value() jsou samozřejmě navíc)
09:34 mornfall hm, zrovna se mi dopřekládal clang
09:35 mornfall jen mi to teda houby pomohlo
09:41 xstill hm, podle mě je ale blbě ta invalidace (souběh insertCell a rehashSegment): rehash,269: it->empty() uspěje ~> insert,198: cell.empty() uspěje, cell.tryStore uspěje ~> rehash,168: it->invalidate
09:42 xstill dostanu buňku která byla úspěšně vložená a nepřesunula se
09:42 xstill (~> je context switch)
09:42 xstill potřebujeme invalidate, kterej atomicky vrátí předchozí stav buňky
09:42 xstill tj avolat invalidate na 269 a pak podle jeho návratového kódu rozhodnout co s tou buňkou
09:43 xstill *zavolat
09:44 xstill otázka je proč se to nestává častěji a i s fast cell
09:55 xstill zkusím to předělat a uvidím co z toho vyleze
09:55 xstill jen teda dofám, že alespoň rámcově chápu co ta tabulka dělá
09:57 mornfall proč tam je vůbec ta čárka
09:57 xstill kde?
09:57 mornfall it->invalidate(), ++it
09:57 mornfall (it++)->invalidate() by dávalo víc smysl
09:57 mornfall jo to s tou čárkou vůbec definovaný?
09:57 xstill aj to by bylo blbě, neivalidoval bys první
09:58 xstill myslím, že definovaný to je
09:58 mornfall (++it)->invalidate() bych neinvalidoval první
09:58 xstill ale problém je  že teď po invalidaci už nezjistíš jestli to bylo prázdné
09:58 xstill -> invalidate ti to musí říct
09:58 mornfall hm, určitě nezjistím?
09:58 xstill a teda s FastCell podle mě můžeš dostat situaci kdy si přepíšeš invalid flag
09:59 xstill u fast cell ne
09:59 mornfall hm, je to pěkně rozbitý teda :D
09:59 xstill protže invalid je flag 3, empty je flag 0
09:59 mornfall ale je to tak
10:00 xstill jo zkusím to opravit dneska
10:00 xstill nemělo byt to být na dlouho
10:00 mornfall fajn, dík
10:00 xstill jen mě teda děsí, že to v podstatě fungovalo
10:00 xstill v praxi
10:09 mornfall tak, myslim že designově to je v podstatě dobře, devil is in the details :-)
13:05 xstill hm nějak se mi povedlo dost zásadně zpomalit AtomicCell
13:08 xstill aha, to je tak když člověk blbne
13:13 xstill hm, můžeš se přihlásit na auru a říct mi jakou máš výchozí hodnotu nice?
13:14 xstill protože já mám 39, by mě zajímalo jestli zavedli nějakou pochynou prioritizaci
13:20 mornfall PR 20, NI 0
13:22 xstill tak se jim asi nelíbilo že mi tam běží divine na 16 vláknech
13:22 xstill hm. jsem si myslel že jsem to opravil a dostal jsem ten stejnej assert
16:23 mornfall no, vygeneroval jsem .bc aniž bych šáhl na disk
16:23 mornfall ale je to docela fuška :-)
16:23 mornfall a vyžaduje #define protected public, zdá se mi
18:37 xstill hm, to není úplně super s tím protected
18:38 xstill třeba bysme je ještě přesvědčili aby to udělali přístupnější
18:39 xstill máš ten kód někde, zajímalo by mě jak to vypadá
18:39 xstill ?
18:40 mornfall http://pastebin.dqd.cz/3LaV/
18:46 xstill hm, to nevypadá až tak strašně
18:48 xstill můžeme to postupně docpat do divine 3.2 jako alternativní compile. Nejlépe taky aby jsme nemusali vyhodit ten starej, přece jen to bude trvat pár let než bude clang >= 3.5 mainstream
18:52 xstill hm, nějak se mi pomátlo nabíjení baterky
19:31 mornfall xstill: kdybych nebyl blbej, tak od toho CodeGenAction podědím místo toho #define ;P
19:31 mornfall (protected je ten konstruktor, jinak nic nepotřebuju)
19:35 mornfall jo funguje to
21:04 xstill tak to je dobře
21:04 xstill já jsem zatím zjistil, kde jsem si udělal livelock
21:12 xstill hm, do kelu
21:12 xstill rozbil jsem haldu
21:56 xstill a k tomu mi zesegvil divine na auře
21:57 xstill a to ani nebyl shared
22:04 xstill hm, jakto že mě na auře utlačuje nějaká java s nice 15 když já mám nice 10

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