Perl 6 - the future is here, just unevenly distributed

IRC log for #divine, 2016-01-23

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

All times shown according to UTC.

Time Nick Message
07:44 xstill mornfall: ještě jedna optimalizace: pokud zjistí transformace, že nejmenší atomic ordering je acq_rel (resp. acq pro load an rel pro store), tak se můžou přeskakovat store na private proměnné a vylévání mimo pořadí. To by mohlo docla zmenšit ty modely které měřím s TSO
07:44 xstill navíc takhle se může stát, že model s TSO je větší, protože se ve store bufferu drží informace dýl
07:45 xstill (takhle = před tou optimalizací)
10:07 xstill mornfall: chceme mít i mějaké údaje o čase, nebo do evaluace stačí jen velikost stavového prostoru a paměť?
10:07 xstill protože pokud by tam měl být čas tak to musím měřit nějak konzistentně na stejných strojích
10:32 mornfall čas asi není potřeba
10:33 xstill ok
15:35 xstill spito, mornfall: divine našel chybu v hashtabulce, assert na brick-hashset.h:795 (it < end), 3 vlákna vložení 2 prvků z toho 1 ze všech vláken
15:36 xstill to je teda veselý…
15:37 xstill ten protipříklad je mrtě dlouhej
15:37 mornfall zejména to vytahování protipříkladu bude veselý :-)
15:37 xstill ale teda našel to brutálně rychle, jediná chyba byla, že jsme tenhle testace nikdy dřív nezkoušeli
15:38 xstill (a trochu jsem vylepšil test aby byl rychlejší)
15:38 mornfall to abych si pospíšil s novým divinem :-)
15:40 xstill hm, ono to nastane i při dvou vláknech
15:41 xstill tipnul bych si, že vložení existujícího prvku při resize z toho kteržý testy padaj
15:44 xstill 425 stavů prohledáno, hlavně že jsme to pouštěli na auře a vygenerovali z toho 3 miliardy stavů…
15:46 xstill 1 context switch…
15:55 xstill ono by mi možná úplně stačilo vidět haldu
16:06 xstill nedá se říct, že by to dávalo smysl
16:22 xstill mornfall: mám takový neblahý pocit, že chyba není v tabulce, ale v implementaci getelementptr, zdá se, že GEP o 2^16 vrátil pointr úplně bez modifikace
16:23 mornfall na tom asi není nic překvapivýho, spíš je otázka kde se bere gep o 2^16
16:24 xstill no segmentSize je 2^16 a it + segmentSize vygeneruje ten gep
16:25 xstill no ale každopádne je chyba že se něco takovýho děje
16:27 mornfall to jo, ale zase to je chyba už dost dlouho známá a v novým interpretu je už i napůl opravená
16:28 xstill dobře, jak napůl?
16:28 xstill spito: takže ty se nemusíš děsit
16:30 mornfall napůl protože to momentálně nic s ukazatelama dělat neumí :-)
16:30 xstill aha :-D
16:30 mornfall ale je tam sada struktur které interpret používá pro reprezentaci hodnot
16:31 mornfall které řeší inicializovanost a celkově validaci operací
16:33 xstill ono na tomhle je hlavně nemilý, že takovej pointr klidně mít můžeš pokud ho nedereferencuješ, ale současnej divine i kdyby ho uměl udělat, tak bude ukazovat někam do jinýho bloku a tím pádem to nejspší nejbližší kanonizace podělá
16:33 mornfall no ne, on do jinýho bloku nepřeteče
16:33 mornfall naopak protočí se na začátek toho stejnýho
16:34 xstill aha, no to je jedno, obojí je blbě
16:34 xstill jakože chtělo by to aby int *x = new int(); int *y = x + N; ... ; *(y - N) fungovalo pro libovolné N
16:35 xstill což vlastně teď asi skoro funguje, jen neplatí, že y - x = N, což by taky chtělo…
16:36 xstill hm, otázka je jestli něco takového vůbec můžeš v praxi chtít
16:36 mornfall no, nevim jak moc je podtečenej pointr definovanej
16:36 mornfall a nakonec i přetečenej
16:36 xstill no právě, to by docela chtělo zjistit
16:36 mornfall (si vezmi N = 2^64 - 1 a spusť si to...)
16:39 xstill hm, to musí být někde definovaný, protože pointr těsně za musí mít vlastnost, že je větší než pointr do objektu, ale někde nad tím musí být hranice kdy to smí přestat fungovat…
16:51 xstill jo, minimálně pro porovnávání je to nedefinované pro cokoli dál než o 1 za
17:03 xstill jo, i pro pointrovou aritmetiku je to tak
17:04 xstill tahle věc je teda nemilá v tom, že to může v praxi docela dobře fungovat, nicméně by docela stálo za to to moct reportovat (ale chce to umět vypnout)
17:05 xstill (hodnota výsledku pointrové aritmetiky pokud je výsledek dál než o 1 za koncem není definovaná)
17:05 xstill a taky "When two pointers are subtracted, both shall point to elements of the same array object,
17:05 xstill or one past the last element of the array object"
17:06 xstill což například znamená, že ten chceck co máme v memcpy má nedefinované chování
18:27 xstill Asi budem muset dělat nějaký refinement nebo něco. Tím, že jsem přespal ty testy tabuky z std::thread na pthread se to brutálně zmenšilo, třeba jsem teď zverifikoval vložení dohromady 4 prvků ze 3 vláken, každý vlákno vkládá jeden stejnej a jeden jinej jak ostatní a má to 7M stavů zatímco předtím mělo vložení 3 prvků (každý z jednoho vlákna) nějaký 600M stavů.
18:28 xstill Jakože by bylo užitečný si říct, že chci použít implementaci std::thread, která nevefikuje správnost toho std::thread…
18:30 xstill a podobně třeba ten malloc, taky pořád hackuju new v těch tabulkách protože mě nezajímá co to dělá při nedostatku paměti
21:37 xstill no to je veselý, jsem zjistil že na různých počítačích dostávám zásadně různý velikosti stavových prostorů pro stejný modely který platí
21:40 xstill respektive teda, můj laptop z neznýmých důvodů produkuje menší stavové prostory
21:49 xstill jeden, ten co ujíždí nejvíc teda používá LLVM 3.7.1 (ostatní 3.7.0) ale jestli to má takový zásadní vliv tak to potěš…
21:53 xstill aha aura ujíždí jen na těch co neplatí, takže to je v pohodě
21:59 xstill zdá se že je to fakt teda tím 3.7.1, to by mě zajímalo co se tam změnilo…

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