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