Perl 6 - the future is here, just unevenly distributed

IRC log for #divine, 2015-07-05

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

All times shown according to UTC.

Time Nick Message
08:49 xstill mornfall: mohl by sis přečíst alespoň to co jsem psal včera od 23:01?
08:49 mornfall já to četl
08:50 xstill a?
08:50 mornfall a... aspoň bude o čem psát? :)
08:50 mornfall nevim
08:51 mornfall (jo, 0:0 není NULL, to jsme řešili v pátek, myslim)
08:52 xstill OK, takže v tom nevidíš problém to takhle udělat? (jakože jestli je to korektní under aproximace pořád)
08:52 mornfall není to úplně příjemný, ale nějak se to řešit musí
08:53 xstill ok
08:53 mornfall ukázat že zapomenout ty položky ve store bufferu je ekvivalentní by nemusel být problém, protože každej dalíš load z nich nutně povede na invalid dereference (takže je jedno jestli se to flushlo nebo ne)
08:54 mornfall další*
08:55 mornfall větší challenge je asi ukázat že to schéma jako takový, nad userspace pointrama, je ekvivalentní s tím jak to dělá HW
09:03 xstill nojo, začínám mít pocit, že o tom by se dalo spát docela dlouho, natož pak ladit tu transformaci
09:04 xstill (například to, že místa na stacku jejichž adresu staticky víš, že nikdo nezná, bys nemusel prohánět přes store buffer)
09:05 mornfall shodou okolností velice podobná podmínka jako ta pro vkládání atomických sekcí
09:06 mornfall (možná i trochu víc než shodou okolností...)
09:07 xstill nojo; hm, co je registr %0, to snad vidím poprvé (a proč někdy je první registr %2)?
09:07 mornfall (cf. escape analysis)
09:07 mornfall %0 bude adresa prvního basic bloku
09:08 xstill no ale má to typ int* (%4 = ptrtoint i8* %0 to i64)
09:08 mornfall 28952 ; <label>:260                                     ; preds = %0
09:08 mornfall ^^ typicky to skutečně je adresa prvního BB
09:09 xstill divný, ale alespoň to není chyba transformace původně tam bylo store i8* %0, i8** %2, align 8
09:21 mornfall jdu se projít, snad mě to probere dost na to abych zvládl něco vygenerovat
09:26 xstill nojo, implementaci si potom popíšu, to budu chít jen zkontrolovat
10:29 xstill se divím, že to nefunuje když z každýho pointru uložím jen 1 bajt :-D
10:51 mornfall to není mnoho
11:07 xstill a navíc je to dost často 0
11:17 mornfall měl bych něco udělat s tím dvojím načítáním modelu
11:17 xstill hm, ale ty bariéry nejsou úplně příjemný, protože v sobě mají unmask. To možná bude chít udělat ještě trochu jinak
11:17 xstill jaký dvojí načítání modelu?
11:18 mornfall no, divine načítá model 2x, počítám jednou pro info a podruhé pro reálnej algoritmus
11:18 xstill a to vadí?
11:18 mornfall když to trvá minutu začne to být docela opruz
11:18 xstill aha
11:52 mornfall hm, cpu.0.temperature: 85.0C ... to je docela dost
11:52 mornfall a málem jsem se spálil o skříň...
11:52 xstill no, furt míň než 97 :-/
11:52 mornfall řekl bych že divine je spíš zimní sport
11:52 xstill :-D
11:54 xstill hlavně teda to moje cpu má kritickou teplotu 100; a ono vzít ten noťas ze stolu když pouští divine není moc příjemné no
11:55 mornfall já mam tjmax 92
11:55 mornfall otázka je jestli to přežije SSD
11:55 xstill a to máš kde? Já mám na minidesktopu 105
11:55 xstill ssd to nemá rádo?
11:56 mornfall haswellová i7 v desktopu
11:56 mornfall nevim, ale zdá se mi že to začíná lehce haluzit :P
11:56 xstill ale teda ta půlka x220 kde jsou disky je docela chladnější
11:56 mornfall teď jsem dostal bus error
11:57 mornfall aha ne za to nemůže ssd
11:57 xstill nicméně 48 stupňu na ssd (podle smartu) je dost no, až se mi to nezdá
11:57 mornfall to je bug v commandline parseru :P
11:57 xstill :-D
11:57 xstill ale hdd má 45, a to je dál od procesoru, achjo
12:00 xstill hm, kde se dozvím jaký bariéry maj nělat phreads?
12:02 mornfall myslíš mutexy? full
12:03 xstill no to jo, ale spíš mi jde o to, kde všude má být, lock a unlock je jasný ale co třeba takový init, destroy (asi ne)?
12:03 mornfall a teda moje SSD má 70, takže se 48 se můžeš jít zahrabat
12:03 mornfall ne, jenom zámky
12:04 mornfall teda ne ve smyslu ne kvůli specifikaci, ale implementace to možná bude vyžadovat
12:05 xstill jo, to bude, občas
12:10 xstill nebo teda, s TSO by asi i join fungoval bez bariér, jen by generoval víc stavů, ale dal jsem ji tam
12:30 xstill hm, ten konvertovanej peterson má ale nějak moc stavů
12:31 mornfall no, to je asi normální ne? kterou implementaci jsi použil?
12:31 mornfall jednak těch TSO operací tam je mnohem víc, druhak ten v examples má 3 vlákna (i když main dělá jen join)
12:31 xstill jak kterou implementaci? TSO a store buffer velikosti 2
12:32 mornfall petersona
12:32 xstill mojí implementaci, ta má taky 3 vlákna
12:32 mornfall zkusil bych -O2
12:32 mornfall to bude obsahovat výrazně míň memory instrukcí
12:33 xstill jo
12:36 mornfall hm, ono to bude dost náročný, vyhnout se tomu dvojitýmu load-u
12:37 xstill jinak přemýšlím jestli by nebylo lepší celej userspace atomic vyhodit a řešit v transformaci llvm atomické instrukce, což bysme stejně měli
12:37 xstill jakej dvojitej load?
12:37 mornfall no load modelu
12:37 xstill jo tak
12:37 mornfall jak vyhodit userspace atomic?
12:37 xstill no prostě kompilovat to proti atomicu co je v libc++
12:38 mornfall jo tak
12:38 xstill stejně ty atomický instrukce už umíme
12:38 xstill hm, divine mi právě sežral všechnu ramku a všechen swap :-D
12:38 mornfall to máš dobrý že ještě můžeš psát
12:38 xstill už stihnul i zdechnout
12:39 xstill kdybych měl swap na hdd tak jsem mohl tak maximálně jít vařit, ale takhle jsem si toho ani moc nevšiml :-D
12:39 xstill hlavně to šlo strašně rychle
12:39 mornfall takže díky SSD budeš mít dneska hlad... :)
12:40 xstill ne nutně, ale teda s -O2 se to zacyklilo při generování 2. stavu :-/
12:40 xstill což mě vůbec netěší
12:41 xstill beztak zase nějaké memcpy, to je dost na nic
12:42 mornfall s tím memcpy to je složitý, asi se bude muset naklonovat
12:50 xstill hm, spíš (alespoň zatím) narvu do implementace __divine_memcpy
12:53 mornfall jo tak, já myslel že ti ho tam vygeneroval clang
12:56 mornfall prokletý instance... achjo
13:00 xstill nj. generuje ho i clang, svině
13:00 xstill teda jakejsi pochybjen intrinsik
13:37 xstill nic, pošlu to co mám, nevím kolik toho ještě dneska udělám, asi moc ne
13:43 xstill ovšem ty pthready asi nejsou korektní :-/
13:44 xstill a my navíc budeme potřebovat překrýt i memcpy/memmove taky (!) začíná se to nějak komplikovat
14:13 mornfall překrýt ve smyslu použít jinou implementaci než tu co volá __divine_memcpy, ale to by nemusel být úplně problém
14:16 xstill hm, vlastně přeplácnout memcpy za jinou funkci by nemuselo tak bolet
14:17 mornfall spíš není moc dobrý řešit store/load/flush jako anotace
14:17 mornfall teda nevidim v tom žádnou výhodu
14:22 mornfall (pokud je chceš uplatnit víc než jen pro ochranu implementace, má spíš smysl udělat lart.weakmem.tso, lart.weakmem.pso, lart.weakmem.sc třeba ... a parametr tý transformace pak jen určí jaký model použít pro ne-anotované fce)
14:22 mornfall (to má docela výhodu že si můžeš dát default SC a jen si explicitně označit 'nebezpečný' fce ve zdrojáku)
14:23 mornfall s tím že implementace by prostě nesla explicitní lart.weakmem.sc
14:26 xstill no load/store/flush jsou označený abych je poznal
14:27 xstill to lart.weakmem.* jsi myslel jako co? taky anotace?
14:27 mornfall a podle názvu bys je nepoznal?
14:28 mornfall jo, LLVM má tendenci používat spíš x.y.z jako namespace-y
14:28 mornfall než ::
14:29 xstill no kdybych chtěl tak jo; no, ta . místo :: je detail
14:30 mornfall a nechceš? je to výrazně jednodušší a problém s dvojí definicí se vyřeší sám
14:30 mornfall ty asserty bys jinak musel přepsat na výjimky
14:30 xstill co, kde?
14:31 xstill jakej problém s dvojí definicí?
14:31 mornfall +                        ASSERT( !_load );
14:31 mornfall no když bude víc funkcí anotovaných LART::WM::load tak se to rozsype
14:31 mornfall a assert úplně nestačí
14:31 mornfall když to vyhledáš podle názvu tak to vyřeší linker za tebe
14:32 xstill tak, neříkám, že je to hotovej kód, ale pravda, najíd je podle jména by bylo asi lepší
14:32 xstill blbý je ale, že i když budeš mít funkci která je sc, tak musíš nahradit alespoň load, protože jinak se to rozbije, jakmile na tom vlákně bude něco ne-sc
14:34 mornfall no, rozbije nerozbije
14:34 mornfall jen když na stejný adresy hrabou oba typy funkcí
14:34 mornfall ale je pravda že to je dost rozbitný
14:34 xstill no uvidí starý hodnoty závislých proměnných
14:35 mornfall závislých proměnných do kterých zapisovala ne-SC funkce, ale jo, pokud bychom chtěli aby to uživatel mohl nějak použít tak by to asi muselo fungovat
14:36 mornfall (druhá možnost by byla že každá SC funkce funguje jako bariéra, ale pak by to nešlo použít pro označení implementace store bufferů)
14:36 xstill jo, to mě taky napadlo
14:36 xstill stejně implementace by musela být označená jinak
14:36 xstill protože ta musí vidět na skutečné adresy přímo
14:38 mornfall lart.weakmem.bypass ... s tím že SC by se chovalo stejně jen by se na začátek vrazil flush?
14:39 xstill jo, to by šlo
14:39 xstill asi, ještě je potřeba rozmyslet volání z těch funkcí
14:40 xstill btw. může se v bitkódu objevovat jak memcpy tak llvm.memcpy intrinsik? nebo se memcpy nahradí za intrinsik?
14:40 mornfall jo, to by asi taky vyžadovalo fence
14:40 mornfall může obojí
14:40 mornfall ale nevim jestli někdy clang vygeneruje ne-intrinsic
15:49 xstill btw. flush by měl být atomický, nebo má vylévat jednotlivé sloty postupně?
15:50 mornfall to je dobrá otázka
15:51 xstill jako realitě asi bude víc odpovídat postupně, jenže pak je otázka, jestli to v pso vylévat všema způsobama
15:53 mornfall mi přijde že se to klidně může vylít atomicky, protože vždycky bude nějaký proložení kde se to 'samovolně' vyprázdnilo v správném pořadí
15:53 mornfall tzn. postupnej flush by jen opakoval nějakou sekvenci která už se stejně stala v jiném proložení
15:53 xstill hm, taky pravda
20:18 mornfall to jsem zase něco vyrobil
20:18 mornfall ono to jako funguje, ale trochu jsem podcenil že Info používá jinej generátor než výslednej algoritmus... občas
20:28 xstill nojo zvlášť u llvm, i když to by se dalo opravit i tak, že bude používat stejnej, jen to zvýší počet instancí
20:39 xstill hm, hlavní použítí auto lambdy u mě stejně asi bude z lenosti :-D
23:19 mornfall no nedalo, protože zrovna ControlLLVM se vybere až podle algoritmu

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