Perl 6 - the future is here, just unevenly distributed

IRC log for #divine, 2015-07-06

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

All times shown according to UTC.

Time Nick Message
02:31 mornfall řekněme že alokace registrů nějak funguje, má to dvě mouchy
02:32 mornfall 1) leakuje to alloca jak divý 2) chce to dotáhnout ty tvoje propagace flagů protože teď tam asi zůstávaj občas haluze
02:33 mornfall nicméně když tam nejsou lart.interference metadata tak to funguje (alokuje to klasicky bez překryvu), takže to asi zarecorduju a pak to budu řešit dál
05:59 xstill no, v těch flagách nějaká chyba bude, pokud by se ti podařilo zjistit kde, nebo alespoň jestli to propaguje moc nebo málo tak by to dost pomohlo
06:22 xstill jinak teda, mít funkce s různou konzistencí by asi dost bolelo, jednat SC funkce by musela flushnout všechny buffery všech vláken asi (a kdo ví co by měla dělat pokud zároveň běží ne-sc funkce), navíc ne-SC funkce volaná z SC funkce musí být schopná se flushnout na konci, a musí to udělat ta volaná (protože ukazatele na funkci), ne že by to nešlo vyřešit, ale znamenalo by to drže
06:22 xstill t si něco jako zásoblní typů funkcí ...
06:22 xstill ... synchronizovaný s callstackem
06:22 xstill hm, ten způsob kterým to dělí zprávy je dost vadný
06:37 mornfall máš to rozbitý
06:38 mornfall nicméně mi přijde že ten flush na ne-SC z SC úplně stačí vrazit za ten call v té SC funkci
06:38 mornfall s vyléváním všech vláken se mi to ale nezdá, teda nepřijde mi to jako užitečná sémantika
06:39 mornfall bariéra přece taky nevylévá buffery jiných vláken
06:41 xstill hm, ten flush by se dal vrazit za každej call o který nevím, že je SC, to je pravda
06:42 xstill nicméně ona je otáza jaký vůbec smysl má to mít možnost kombinovat, jedině že to může zmenšit stavovej prostor
06:44 xstill i když to možná snačí
06:44 mornfall jo, a mohlo by to dost pomoct s debugováním
06:45 mornfall teda asi to je míň práce než všude cpát bariéry ručně, když nevíš co přesně se sype
06:45 mornfall (a to asi prozatím nepoznáš)
06:53 xstill hm, ale teda blbý je, že bariéra obsahuje __divine_interrupt, to by mohlo dělat docela problém když je tam začneme přidávat automaticky
06:53 mornfall no, to se celkově budeme muset znovu zamyslet jestli to nejde řešit nějak systémově
06:55 xstill no, pokud by nějak šlo si v průběhu atomické sekce zapamatovat jestli hrabe na něco co má být viditelné a pak podle toho udělat interrupt na konci (pokud to není obalené v další atomické sekci) by mohlo docela pomoct. Jakože interrupt mask by ty interrupty nezahazovala, jen odkládala. Ale to nevím jestli jde
06:55 mornfall já si nepamatuju proč nestačí udělat interrupt v momentě unmask pokud v tom atomicu bylo něco viditelnýho
06:56 xstill druhá možnost co mě napadla, je mít intrinsik kterej zjistí jestli jsem pod maskou, ale to je takový trochu nehezký řešení
06:56 mornfall no, jít by to šlo, problém je že to asi nefunguje
06:56 mornfall ale nepamatuju si proč
06:56 mornfall asi proto že ten interrupt musíš dát před tu masku ne za ni
06:57 mornfall pokud bude v ní něco viditelného
06:57 xstill proč před?
06:57 xstill to funguje tak, že interrupt se dává před vidětelnou instrukci?
06:58 mornfall jo
06:58 mornfall hm, ale ono by to v zásadě taky šlo
07:00 mornfall ty můžeš slepit všechny tau a nejvýše jeden non-tau přechod
07:00 mornfall hm
07:00 mornfall ale teď si nemůžu vzpomenout proč je to vlastně před a ne po
07:01 mornfall po by bylo možná smysluplnější
07:03 xstill no, hlavně si nejsem jistej, že takhle je to korektní
07:03 mornfall v jakém smyslu?
07:04 mornfall jakože to userspace používá opačně?
07:05 xstill jakože v http://pastebin.dqd.cz/PpM1/ to nenajde protipříklad
07:05 mornfall jak by mohlo? :-)
07:05 mornfall to je přesně to proč se tam ten interrupt dává
07:06 mornfall kdyby to fungovalo tak interrupt nepotřebujeme
07:06 xstill protože by tam měl být. ten zápis x = 1 není pod maskou a je viditelný
07:06 xstill a bez redukcí ho to najde
07:06 mornfall jistě
07:06 xstill to mi nepříjde jako korektní chování
07:07 mornfall je to specifikovaný chování
07:07 xstill to mi nepříjde moc dobrý
07:07 mornfall to že můžeš zacyklit divine uprostřed generování stavu taky není 'moc korektní'
07:09 xstill no, pokud myslíš pod maskou, to mi příjde dost jinej problém, pokud dělám nějakej bordel pod maskou tak si za to můžu sám. Pokud ale zavolám náhodou po zápisu maskovanou funkci a ten zápis zmizí, tak se mi to moc nelíbí
07:09 mornfall (a pthread.cpp to respektuje)
07:09 mornfall ten zápis nezmizí
07:10 xstill tak když to nenajde protipříklad
07:10 mornfall no ty ho v tý masce přepíšeš
07:10 xstill krom toho bych očekával, že definice korektnosti redukce je taková, že pokud nějakou chybu lze najít bez redukce tak jí lze najít i s redukcí
07:11 mornfall no, není, definice korektonsti je taková že splňuje specifikaci, a specifikace je že pokud je uvnitř masky viditelná akce, musí být před maskou interrupt
07:12 mornfall už z existence interrupt-u je jasný, že s redukcí a bez redukce to nebude ekvivalentní...
07:12 mornfall protože bez redukce interrupt nedělá vůbec nic
07:13 mornfall takže jo, bez interrupt-u by to bylo lepší, ale to jak to je teď není bug
07:14 xstill hm, to je dost neintuitivní, ale pak jsi mě měl ale už dávno vynadat za to, že ty interrupty dávám na konec (takže třeba atomic není korektní)
07:15 mornfall jo no, interrupt na konci nedělá nic, v podstatě
07:16 mornfall ale zrovna userspace kód o kterým mi lidi tvrdí že funguje zas tak moc nečtu :P
07:26 xstill to bys docela mohl, alespoň když to člověk dělá poprvé
07:39 xstill píše se tohle někde v dokumentaci?
07:40 mornfall nevím, ale manuál __divine_interrupt* vůbec nezmiňuje, takže asi spíš ne
07:41 mornfall trochu mi to segví, ale jinak by to možná i mohlo fungovat
07:46 mornfall ale už asi vím proč je to takhle, původně jsem chtěl aby load nemusel být viditelnej a tím se dost komplikovalo kam ty interrupty dát, ale ono to stejně nefungovalo, resp. nikdy jsem se nedostal k tomu to nějak rozumně opravit
07:47 mornfall (v SC můžeš nezávislý loady asi docela dobře sloučit)
07:48 mornfall někde se mi ještě válí branch kde jsem to zkusil znovu a lépe ale taky to nikdy nezafungovalo :\
07:53 mornfall hm, ale možná jsem teď stejně vymyslel lepší redukci
07:55 mornfall [hm, přerušení po viditelné instrukci vede na znatelně víc stavů, to je trochu divný...]
08:19 xstill ještě by mohlo být zajínavý místo explicitního interrupt mít interrupt mask, který by měl parametr, zda má viditelný efekt, a pokud by měl a zároveň nebyl už pod maskou, tak by udělal interrupt před vstupem do masky
08:19 xstill možná by to bylo intuitivnější
08:19 xstill a kdyby se to náhodou někdy předělalo na interrupt za instruktcí, tak stačí změnit divine, ne userspace
08:20 xstill explictní interrupt bez masky (což nevím jestli vůbec dává smysl mít) by pak byl něco jako __divine_interrupt_mask( 1 ); __divine_interrupt_unmask();
08:22 mornfall jakej je rozdíl mezi tímhle a __divine_interrupt(); __divine_interrupt_mask()?
08:22 xstill no, hlavně v tom případě kdy to voláš a už jsi pod maskou, a pak v tom, že se nemůžeš splést a dát interrupt na konec
08:22 mornfall interrupt pod maskou nedělá nic
08:23 mornfall je pravda že by to zabránilo špatnému použití interrupt-u
08:24 xstill hm hm, to mi možná vlastně zatím stačí, že interrupt pod maskou nedělá nic
08:31 mornfall ten rozdíl je v _pthread_entry
08:32 mornfall on samozřejmě udělá spoustu věcí než zavolá mask
08:33 xstill hm dotaz: proč Milan i spito dělaj tu věc, že se zamaskujou, pak případně zase odmaskujou, udělaj interrupt a zamaskujou? Nestačí udělat __divine_interrupt(); __divine_interrupt_mask()?
08:34 mornfall nestačí pokud potřebuješ aby se ta maska přerušila i když to voláš už zamaskovaný
08:34 xstill ale pokud potřebuju aby se ta maska nepřerušila pokud to volám už zamaskovaný, tak to moje je OK?
08:35 mornfall ano
08:35 xstill ok
08:37 xstill příjde mi že ty weakmem funkce by měli dělat přesně tohle (pokud jsou volaný z atomický sekce pak ta sama se musí postarat o to aby před ní byl interrupt)
08:37 mornfall jo to asi jo
08:37 mornfall hm, pthread.cpp:285 je mask bez interrupt
08:37 mornfall který dělá ten rozdíl ve stavech
08:37 mornfall (uvnitř entry se typicky děje něco viditelnýho)
08:38 mornfall tak jak to je, zbytek _pthread_entry se 'přilepí' k poslední hraně která začla v entry()
08:39 mornfall teď nevim jestli to tak je úmyslně nebo omylem
08:40 mornfall a docela nutně potřebuju nějakej kofein
08:41 xstill no pokud něco v destruktorech pthread_key bude hrabat něco na co hrabe entry (což je dost pravděpodobný) tak to může být problém. Takže ten iterrupt tam na můj vkus chybí
08:43 mornfall eh, to že ty destruktory běží pod maskou je možná mnohem větší chyba
08:44 xstill no…
08:44 xstill toho jsem si pravda všimnout mohl, na tu funkci jsem včera koukal
08:50 mornfall jdu pro ten kofein, bbiab
08:50 xstill :-D
09:31 xstill do háje proč je domumentace LLVM vždycky půl dne mimo
10:01 mornfall xstill: ty void main-y jsi taky mohl rovnou opravit ... :-P
10:43 xstill nojo
11:57 xstill je validní volat memmove( x, x, n )? (jakože by to neudělalo nic)
12:00 mornfall The memmove() function copies len bytes from string src to string dst.
12:00 mornfall The two strings may overlap; the copy is always done in a non-destructive
12:00 mornfall manner.
12:00 mornfall asi je to legální
12:03 xstill ok
12:04 mornfall ty memoryflagy se budou muset trochu učesat, je v tom pěknej bordel furt
12:07 xstill však já vím, ale kdybych se tím teď zabýval tak ten memics nebude
12:11 mornfall zatím jsem opravil asi 4 místa a furt to nefunguje :P
12:41 mornfall ale asi se blížim,           l1[8]@112 offset 112: 7:0 , flags = [ 20001111 ]
12:41 mornfall to je vesele zmršenej pointer
13:04 xstill jo, co ta ScalarMemory? zrovna jsem narazil na takovej load
13:04 mornfall všechno bude :-)
13:07 xstill nojo, něco s výjimkama to  je
13:13 mornfall hm, došel mi 100000-řádkovej scrollback
13:13 mornfall asi jsem si to měl ukládat do souboru
13:27 mornfall je to docela solidní záhada
13:32 mornfall ukazatel na haldě má po instrukci A flagy 21111111 a před instrukcí B (mezi A a B je jen @dbg.declare) 20001111 ...
13:34 mornfall (a tím dbg.declare to není, můžu ho vyhodit a žádnej rozdíl)
13:34 mornfall a je to pod maskou, takže kanonizace za to taky nemůže
13:35 mornfall nojo
13:37 mornfall může za to withValues( Get< Pointer > ...
13:46 mornfall no, nebo taky ne, protože ten dump mám ještě předtím... meh
13:59 xstill hm, co je zase invoke?
13:59 xstill to nějakej specielní call?
14:03 mornfall viz avocs 2014 :) call s výjimkama
14:20 xstill nj. to ještě budu muset vyřešit, ale zdá se že jsem se úspěšně zbavil rekurzivních volání store bufferů
14:21 xstill hm, ale s O2 to stejně nejede
15:55 mornfall asi nastal čas na alkohol, horší už to stejně nebude (poloinicializovanej pointr jsem vyřešil, tak dál....)
16:42 xstill jo? a čím to bylo?
16:47 mornfall no, on je sice pthread_join v masce, ale ty alloca jsou před ní, takže tam běžela (lehce vadná) kanonizace
16:47 mornfall nicméně teď to assertuje
16:47 mornfall takže pokrok moc velkej nenastal
16:48 mornfall (alloca a nějaký story)
16:49 xstill aha
16:53 mornfall ale to je taky proto že jsem blbej
17:53 xstill proč je vlastně memcpy intrinsik v divine?
17:58 mornfall no, teď už možná historické důvody
17:59 mornfall ale byla doba kdy nešlo kopírovat ukazatele po bajtech a dostat smysluplnej výsledek
18:56 xstill hm, tak O2 asi nechci, ono mi to vektorizuje memcpy
18:59 xstill takže O1 je asi ta správná volba, protože vektorový blbosti fakt řešit nehodlám
19:04 xstill hm, člověk si implementuje memset a ono to používá llvm.memset v implementaci…
19:04 xstill proč tam do háje nemůže být store na ten jeden bajt
19:08 mornfall :D
19:08 mornfall je to moc chytrý co :P
19:08 xstill úplně úžasný no
19:12 mornfall ber to tak že naši kolegové pláčou nad getelementptr...
19:13 xstill jací kolegové?
19:13 mornfall no, Honza něco zmiňoval
19:14 xstill kterej Honza? getelementptr celkem ani nevím co je :-D
19:14 mornfall Strejda
19:14 xstill jo tak

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