01:27
vendethiel joined
03:17
colomon joined
04:51
flaviusb joined
06:26
FROGGS joined
06:43
arnsholt joined,
tadzik joined
06:44
camelia joined
06:51
ggoebel joined
07:09
zakharyas joined
07:23
mj41 joined
07:28
lizmat joined
08:05
vendethiel joined
10:55
lizmat joined
11:09
mj41 joined
11:35
colomon_ joined
11:46
retupmoca joined,
hoelzro joined
12:09
zakharyas joined
15:06
Ven joined
15:45
FROGGS joined
|
|||
ingy | japhb: tmux' killer feature for shared sessions is auto sizing | 16:22 | |
years of screen hate for having to agree on a screen size | |||
timotimo | what does screen do if all attached sessions aren't the right size? | ||
ingy | it just fucks up weirdly | 16:23 | |
and we used to do 20 user shared meetings | |||
timotimo | mhm | 16:24 | |
ingy | other than that I can't really identify anything in tmux that I couldn't do it screen | 16:26 | |
though tmux *feels* more well thought out | |||
but it had screen to set the bar | |||
japhb | Huh. The version of screen I used to use for those multi-user debugging sessions just shrunk to the smallest attached viewport; people with larger viewports just saw the active screen in the upper left of their viewport. | 16:42 | |
Dunno if it was stock or hacked to be that way. | |||
Yeah, it's much easier to make it look easy when a previous project found all the jagged hard bits. :-) | 16:44 | ||
PerlJam finds it odd that screen is still relevant after all these years. | 16:45 | ||
japhb | PerlJam: Think how long it took to get rid of SysV Init ... oh wait, we still haven't ... >.< | 16:48 | |
timotimo | we want to make a moarvm release | 16:53 | |
right? | 16:54 | ||
16:54
prammer joined
16:55
jepeway joined
|
|||
PerlJam | usually :) | 16:55 | |
timotimo | ah, now i read that froggs is going to cut the release in ~1.5h | 16:57 | |
PerlJam | Who can upload release tarballs? (I kind of assumed FROGGS was on that list) | 16:59 | |
FROGGS | not for MoarVM | ||
I can upload stuff to rakudo.org | |||
PerlJam | Is it just jnthn then? | 17:03 | |
17:04
zakharyas joined
|
|||
PerlJam | heh, trolling the logs, it looks like we've had this conversation before | 17:05 | |
FROGGS | aye | 17:25 | |
17:27
zakharyas joined
17:41
Ven joined
17:59
brrt joined
|
|||
brrt | \o | 17:59 | |
timotimo - i renember what was the problem with deopt | 18:00 | ||
deopt is the part that requires the normal spesh codegen for the JIT to work | |||
because of inlining boundary calculations | |||
if i recall completely correctly | |||
dalek | arVM: e80bd35 | FROGGS++ | docs/ChangeLog: add changes for 2015.05 release |
18:08 | |
timotimo | brrt: please explain? | 18:28 | |
that's a big-ass changelog | 18:29 | ||
brrt | i'll have to grab the code for that | ||
waitaminute | |||
very simply put | 18:30 | ||
at src/spesh/deopt.c line 12, is the definition of uninline | 18:31 | ||
it takes an argument for the offset in the speshed frame | |||
this offset is used to determine in which inlines the code is currently | |||
see line 20 for the relevant comparison | 18:32 | ||
timotimo | OK, but can't i just call it with "the right" value at the end of the bridge, just by taking the value that's "at the beginning" of the bridge (to say: where we branch into the bridge) | 18:33 | |
this is about my question whether or not we can have bridges for deopt inline, yeah? | |||
brrt | oh, you can do that, that'd mean calling MVM_spesh_deopt_one_direct() (i'd think) | 18:34 | |
the thing is | |||
this all requires that spesh does real codegen | |||
ultimately, that's not what you want | |||
timotimo | it ... does? | ||
brrt | and not what you need | ||
yes | |||
timotimo | i'm not sure i'm on the same page as you just yet | 18:35 | |
brrt | you know how you wanted to stop spesh codegen if we already had a JIT frame? | ||
timotimo | ah, yes | ||
i wanted to deallocate data from whatever spesh still holds (the spesh graph, iirc) | 18:36 | ||
brrt | if we can JIT, spesh currently generates a): a specialized frame b): a JIT-compiled frame, and c): the frame in a) is *never run* | ||
timotimo | but it had to keep the deopt indices around | ||
brrt | right, and now you know why | ||
timotimo | ah, we jit immediately? we don't even wait for the spesh'd frame to get considered hotter? | ||
brrt | it is because spesh deopt requires a sensible offset to find the current inlined frame | 18:37 | |
well, yes, we JIT immediately | |||
18:37
mj41 joined
|
|||
brrt | the JITting is directly hooked into candidate.c | 18:37 | |
timotimo | OK | 18:38 | |
i'm still not quite sure what your overall target of telling me all this is | |||
i suppose i can still build bridges out of code that's outside of inline boundaries | |||
brrt | yes. i don't think that will be the problem either | 18:39 | |
my purpose is | |||
i want that implicit dependency from the JIT to the spesh codegen (of a useless frame) killed | |||
and i was wondering if you had any ideas how | 18:40 | ||
timotimo | ah | ||
no, i don't :( | |||
brrt | hmm | ||
timotimo | i suppose i'm not deep enough into that | ||
as it currently stands, i consider the task of building bridges to be quite shallow, actually | 18:41 | ||
brrt | oh really? | ||
timotimo | yes, let me try to outline it | ||
brrt | i'm listening | ||
timotimo | 1) identify variables whose sole reason for being kept around is that it's expected to be available in the deopted code after we maybe deopt | ||
2) identify all the deopt points that keep this value alive (i think this can be multiple deopt points for a single variable) | 18:42 | ||
3) turn the deopt instruction into a guard-or-branch and split up the BB at that point | |||
4) in the target branch of the guard-or-branch, emit a deoptone or deoptall at the end with the correct deopt index/address/whatever | 18:43 | ||
brrt | how do you detect 1) | ||
and 2) | |||
doesn't seem so shallow to me | |||
but continue | |||
timotimo | there's code in the facts that already does it, all we have to do is emit a fact flag (which i have a very short patch for locally) | ||
brrt | arent guards already bb ends? | ||
timotimo | i'm not sure, i don't think so | ||
brrt | hmmn no | 18:44 | |
timotimo | 5) move everything that only has to be around for deopt reasons into the "bridge" BB | ||
brrt | they should be | ||
timotimo | they don't need to be, but it'd be simpler and my code will end up having to make that be the case anyway | ||
6) maybe successively move more and more stuff into the bridge as more variables are only depended on by code in the bridge | |||
7) profit | |||
brrt | ok | 18:45 | |
brrt likes it | |||
what if there are no such variables, you just leave it alone? | |||
timotimo | sure, then a bridge doesn't have to be built at all | ||
brrt | i can imagine that can be quite a saving | 18:46 | |
timotimo | i've seen multiple cases where we emit a spesh'd lookup of a code object instead of asking an object for a named method, but the const_s for the method's name still sicks around because post-deopt code depends on it being there | ||
(of course: if the type isn't the same any more, you have to know what method name to look for) | 18:47 | ||
but the const_s doesn't belong in the spesh'd code, IMO | |||
this kind of thing might also be useful for "allocation sinking" kinds of deals | |||
brrt nods | 18:49 | ||
but const_s isn't really a very large op | |||
timotimo | of course not | 18:50 | |
i hope there's other things that'll fall under this opt :) | |||
when we do box/unbox tracking, we may find more stuff that could go into bridges | |||
there's also bunches of set instructions that are only there because the original code used to have many registers populated with the same value | |||
it'd be nice if we could just make our frames have fewer registers "in use" and "scatter our values around" in case a deopt is needed | 18:53 | ||
i wonder how expensive walking the stack for gc roots is | |||
were you expecting something else when i talked about deopt bridges in the past? | 18:54 | ||
brrt | no | 18:59 | |
but i recall that there was something that i wanted fixed in deopt | |||
timotimo | good, in that case i don't disappoint when i deliver the implementation ... perhaps | 19:00 | |
brrt | :-) | ||
timotimo | i might disappoint myself if it turns out the effect is negligible | 19:01 | |
brrt | no | ||
this in itself might not matter much | |||
in combination with tracing, it is likely to help much more | |||
in combination with the improved JIT codegen, this means that a register allocater will have fewer live variables, and thus more values that can be kept in memory | 19:02 | ||
eh in registers | |||
that will actually be used | |||
that is why i think it's awesome | 19:03 | ||
we get good performance not from one silver bullet but by a large amount of tiny things that combine | 19:04 | ||
(that is the punchline from my talk on JIT compilers, if i do one, by the way) | 19:06 | ||
timotimo | ok | 19:08 | |
thank you for cheering me on :) | 19:09 | ||
brrt | your welcome :-) | ||
you're | |||
ugh | |||
timotimo | sometimes i find it hard to just be happy about the improvements we've made so far and feel a bit sad about how far we are still away from very competitive performance for every-day tasks | 19:10 | |
brrt | oh, that's not our fault though | 19:11 | |
perl6 has evil semantics | |||
timotimo | partially | ||
brrt | i mean, containers? wow | ||
who thinks up these things | |||
:-) | 19:12 | ||
timotimo | i'm mostly upset about the lexical-to-local optimization being busted since we got lexicalref | ||
brrt | eh, how come? | ||
timotimo | i expect it's the source of a big amount of BOOTCode allocations | ||
it has to lower lexicalref to localref where before it was just turning lexical into local | 19:13 | ||
and the code-gen for accessing locals as localref and localrefs as locals is busted | |||
quite sadly | |||
i wasn't able to fix it up properly :( | |||
brrt | hmm oh yes i recall | 19:15 | |
we'll fix it someday | |||
(another small thing that combines ;-)) | 19:16 | ||
brrt afk | |||
timotimo | fwiw, i consider this to be huge | ||
19:21
Ven joined
19:26
Ven joined
|
|||
jnthn | oh my, today is release day, ain't it... | 19:44 | |
FROGGS | jnthn: it is :o) | ||
jnthn | grmbl | ||
FROGGS | jnthn: np... | ||
jnthn | OK, did you do any of the release steps already? | ||
FROGGS | jnthn: do we want to do it tomorrow? | ||
I updated the changelog, nothing else | 19:45 | ||
and did testing and stuff of course | |||
tbh, I would like to do it tomorrow, then I have a bunch of hours more of testing | 19:46 | ||
jnthn | I've gotta get up at 6:30am tomorrow, and am still recovering from assorted health fail. | ||
So I'm +1 on tomorrow | |||
FROGGS | k :o) | ||
I'll do the release and provide a tarball for you to upload then tomorrow | |||
jnthn | OK, or if you can wait until 11am or so I'll be home | 19:47 | |
And my only task tomorrow is laundry, so I'll certainly have time to do it once hom :) | |||
*home | |||
Maybe I'll even do some of the steps on the plane | |||
FROGGS | around 11am will work too | 19:48 | |
I do not expect that we need to touch moarvm at all | |||
jnthn | ok | 19:52 | |
19:53
brrt joined
|
|||
brrt | jnthn - do you think you'll be at YAPC::EU this year? | 20:07 | |
jnthn | brrt: Highly likely. | ||
brrt | good :-) | 20:08 | |
jnthn | brrt: I mean, I fully intend to go, and there's time in my schedule for it. | ||
So unless something highly unexpected comes up, I'll be there. :) | |||
jnthn will be happy to see Granada again too :) | |||
brrt | nice, i intend to go too, despite it being the wrong month | ||
have you ever been there? | |||
jnthn | Yeah :) | 20:09 | |
brrt | photos say its pretty | ||
jnthn | But in a February, when it was about perfect weather for me. :) | ||
It *is*. :) | |||
Especially the palace there. | |||
(February weather in Granada = warm enough I could wear a t-shirt, cool enough I could walk briskly and be comfortable :)) | 20:10 | ||
brrt | yeah, i can imagine that | ||
jnthn | I suspect September will be...different. :) | ||
It was kinda cool in Feb though, 'cus the mountain visible in the distance from the city had snow on it. But you were wandering around nice and warm :) | 20:11 | ||
brrt | weather sites say it'll be around 24 degrees celsius, which i can live with | 20:12 | |
not for birsk walking, though | |||
*brisk | 20:13 | ||
jnthn | aye | ||
brrt | hmm, i've thought about it some more | 20:15 | |
timotimo | jnthn: you'll do some of your laudnry on the plane? | ||
brrt | jet laundry | 20:16 | |
anyway, about the deopt offset thingy | |||
timotimo | the mile high laundry line | ||
brrt | we only strictly need to know the target offset (in the original bytecode, which you know because annotation) | ||
and the inline number, if any | 20:17 | ||
timotimo | yeah | ||
brrt | hmm | ||
timotimo | probably | ||
brrt | no, that's not true, we may be multiple inlines deep | ||
timotimo | first step: bail out of bridge building if we're in inlines at all ;) | ||
brrt | you can also add a new inline to the table for +the bridged part | 20:18 | |
argh, rats on the keyboard | |||
timotimo | :) | 20:19 | |
jnthn | timotimo: No no, the releaes process :P | ||
PerlJam | .oO( Due to a freak laundry accident, MoarVM is unable to be released ) |
20:22 | |
timotimo | oi don't jinx it! | 20:24 | |
brrt | hmm | 20:25 | |
PerlJam | timotimo: jnthn can already circumvent any jinx by increasing the bus number :) | ||
timotimo | you may be able to increase the bus number, but the jnthn amount seems to be ceiling'd at 1 :( | 20:26 | |
PerlJam | (Where does this weird idea that speaking of thing makes it happen come from?) | ||
brrt | i suppose that if we *are* multiple inlines deep, their nesting structure can still be determined, but i'm not sure how that would happen without spesh coegen | ||
PerlJam: magic thinking, one of the most ancient human biiases | |||
unless we encode the nesting structure in some other way | 20:27 | ||
PerlJam | brrt: I suppose at some point in the past someone said something like "I hope it rains today" and then it did. Thus confirming that speaking of a thing makes it happen. :) | 20:29 | |
timotimo | i'm pretty sure handlers always bound things within the linear order | ||
brrt | i think it can be generalised to the overactive agent detection bias | 20:30 | |
handlers? no, i'm talking about inline boundaries | 20:31 | ||
these are generated at spesh-codegen-time | 20:32 | ||
timotimo | right, but wouldn't they work similar to that? regarding linear_next and all? | ||
i'm pretty sure inlines just get pasted at the end of an existing spesh graph, so they'd always end up a linear blob from begin of inline to end | |||
brrt | yes | 20:33 | |
timotimo | following that logic, the inner inlines would be at the end of an existing inline | ||
seems somewhat easy | |||
brrt | that is not the problem | ||
timotimo | oh | 20:35 | |
i seem to not be experienced enough with the inline stuff to get this | |||
to be fair, the thought of inline deopt has scared me a little bit ... chopping up the current frame into multiple pieces and turning them into multiple proper frames again ... :) | 20:36 | ||
jnthn | Inline deopt is...a bit intricate | 20:37 | |
I need to sleep now, so don't have time to get the full context of what's being discussed | |||
timotimo | good night and get well soon! | ||
jnthn | But one note: the inlines offset table is ordered | ||
timotimo | also, good flight! | ||
jnthn | Quite carefully iirc | 20:38 | |
So you will always encounter them going "outwards", or "towards callers" if you walk the table in order. | |||
And the deopt logic relies on that. | |||
It's the same trick with the handlers table too: a linear scan gets you the innermost applicable one | 20:39 | ||
brrt | right. but what i'm saying is, that relies on having the spesh-codegen-created offset, and i'd like to get rid of that, as it isn't very cheap to maintain for the JIT | 20:40 | |
jnthn | brrt: But you have the inline index, no? | ||
brrt | oh well, sleep well anyway :-) | ||
jnthn | (at JIT time, I mean) | ||
brrt | yes | ||
i do, even if we'd never codegen | 20:41 | ||
jnthn | Maybe that helps :) | ||
Anyway, sleep time... :) o/ | |||
brrt | sleep well | ||
timotimo | so just copying out the table after spesh is done isn't an option | ||
jnthn | Thanks! 'night | ||
timotimo | but we do want the spesh phase | ||
so the part that we'd throw out is the part that turns the spesh graph back into a linear slice of code | |||
hmm. | |||
would it be enough for a "replacement" just to have a linear scan through the spesh graph and note the sizes of the used instructions? | 20:42 | ||
brrt | yes. spesh stays, but creating an optimized bytecode frame goes | ||
hmmm | |||
that would work, yes | |||
hacky, but ok | 20:43 | ||
timotimo | have you had a better idea yet? | ||
brrt | well, pass the inline index directly to the deopt_one function, would be my idea | 20:44 | |
and figure out how you'd need to uninline from there | |||
timotimo | oh, hm | ||
brrt | the inlines table is created during inlining, before codegen, so i'd think we'd be okay there | 20:46 | |
timotimo | mh | 20:52 | |
brrt | yes, complex stuff, i know | 20:53 | |
timotimo | it doesn't seem terribly complex yet | 20:57 | |
putting the deopt target directly into the code seems like another kind of devirtualization | |||
there was a frame that used to deopt on 99% of calls to it | |||
brrt | hmm yes | ||
timotimo | right before the very end of the code, but still | ||
brrt | really? :-o | ||
timotimo | yeah | ||
brrt | we did something wrong there, clearly | ||
timotimo | it was caused by a "try" where putting a $! = Any in front removed the deopts | 20:58 | |
but i couldn't measure a difference in performance | |||
brrt | still | ||
timotimo | yeah, we logged a type or something for the contents of $! and that "suddenly" turned out not to be true any more | ||
however, we assigned to $! next, so i don't really know what would have caused the guard to become used | 20:59 | ||
brrt | if you don't care about wastefulnes emotionally, how will you ever achieve greatness | ||
timotimo | "wer den pfennig nicht ehrt ist des talers nicht wert" | 21:00 | |
brrt | we have that in dutch too | 21:01 | |
timotimo | i think i know that originally from scrooge mcduck | 21:02 | |
brrt | nice :-) | 21:03 | |
dutch people are miserly enough to use it all the time | 21:04 | ||
in money terms, its probably not correct though | |||
22:06
vendethiel joined
22:34
tadzik joined
23:25
xiaomiao joined
23:47
jepeway joined
|