00:47
timotimo joined
01:39
vendethiel joined
|
|||
diakopter | CACKLE "learn the c" | 01:55 | |
01:56
zakharyas joined
|
|||
konobi | arnsholt: portableumem is really useful for memory testing | 01:56 | |
and for use during production! | 01:57 | ||
timotimo | can you tell more about why it's cool to have? | 02:04 | |
konobi | timotimo: blogs.oracle.com/dlutz/entry/memor...th_libumem | 02:54 | |
timotimo | for some reason, the version of the variable is incremented by one after the guardconc happens ... and that makes removing the guard problematic if i want to also reduce the usages | 03:15 | |
because then the writer of that variable/version gets exploded, but the readers of the variable/version+1 don't get their variable set to something sensible and *bam* | |||
huh, or am i wrong about this ... | 03:16 | ||
could also be we've got a "known concrete" flag that's wrong | 03:17 | ||
need to sleep before i can properly figure out what's going on | 03:20 | ||
OH! | 03:23 | ||
of course it's known concrete when we have a guard guarding it | 03:24 | ||
but that's "known from a log guard" | |||
damn, this'd require some extra cleverness | |||
05:56
domidumont joined
05:58
vendethiel- joined
06:00
domidumont joined
06:43
pyrimidine joined
06:52
domidumont joined
07:42
brrt joined
|
|||
nwc10 | jnthn: ASAN still tolerates you(r branch) | 09:17 | |
also, setting built under valgrind | |||
jnthn | Nice :) | 09:22 | |
10:37
brrt joined
12:19
MadcapJake joined
12:50
brrt joined
|
|||
brrt | hey, #moarvm | 12:51 | |
any idea why in reframe-jit, i get a SEGV in nativecall on getlex | |||
actually,waitaminute | |||
who assign tc->cur_frame | 12:59 | ||
jnthn | brrt: Well, various things can | 13:02 | |
brrt | it's fairly evident we've jumped up in the frame | ||
jnthn | brrt: Anything that invokes, and anything that causes stack -> heap promotion | ||
Where you don't really move frame, but the frame moves. | 13:03 | ||
brrt | basically, my cur_frame points to a frame that was generated 200 alloc_frames ago | ||
however, and here is the point, tc->current_frame_nr does /not/ | |||
i've taken some care to make sure that tc->current_frame_nr is updated on entry (MVM_frame_invoke, iirc) and in exceptions (unwind_to, iirc) | 13:04 | ||
actually, that's in remove_one_frame | 13:05 | ||
evidently, we're somehow in the NativeCall tests jumping up the stack and not assigning the current_frame_nr | 13:19 | ||
and that probably causes the invokish to fail... | 13:20 | ||
continuations.... | |||
jnthn | brrt: NativeCall does funky things if you've got callbacks | 13:21 | |
brrt | how does it do them | ||
jnthn | Well, it needs a "nested" interpreter | 13:24 | |
Look in nativecall_dyncall.c and search for backup_ | |||
But that'd only explain bustage in the callback tests, not all of nativecall tests | |||
brrt | uhuh | ||
i'm looking at assignments to tc->cur_frame... the cur_frame is set in uninline | 13:25 | ||
jnthn | Continuations are used all over the place | ||
Yeah, but after an uninline you'd have fallen out of the JIT? | |||
'cus that's part of deopt | |||
brrt | ehm, yeah.... | 13:31 | |
true | |||
still, it ought to be assigned there | |||
(i see the nativecall thing) | |||
brrt wonders why he didn't think of ack 'tc->cur_frames+=' before | 13:41 | ||
dalek | arVM/reframe-jit: 13666ec | brrt++ | src/core/ (4 files): Make frames identifiable using a sequence number Because frames can now be garbage-collected, they can be moved, and the identity check used in the JIT will no longer work. Thus, we'd 246c941 | brrt++ | src/ (5 files): Update the tc current_frame_nr in all cases There were a number of cases which I missed, causing 'weird' errors. This makes rakudo pass sanity checks. |
13:47 | |
brrt | sorry dalek... | ||
13:47
dalek joined
|
|||
arVM/reframe-jit: 529e061 | brrt++ | src/jit/emit_x64.dasc: Add DynASM definition for our frame_nr |
|||
brrt | t/spec/S17-supply/syntax.t .................................... Failed 9/60 subtests :-( | 13:50 | |
otherwise cleanish | 13:51 | ||
so far | |||
13:54
vendethiel joined
|
|||
jnthn | brrt: That may not be your fault | 13:57 | |
brrt | let's hope :-) | ||
i've sent a PR | 13:58 | ||
for reframe-jit on top of reframe | |||
jnthn will look at the PR shortly :) | 14:34 | ||
[Coke] | jnthn: are you doing the moar release this month? Should we get someone else to do one of them? | 15:04 | |
jnthn | [Coke]: I don't mind doing it but it'd be good to scale it :) | 15:14 | |
[Coke] | ok. I hoelzro++ is doing the rakudo/nqp releases this month. | 15:18 | |
diakopter | I wish dalek could report pull requests | 16:26 | |
well, not to mention issues as well | |||
16:36
domidumont joined
|
|||
[Coke] | diakopter: developer.github.com/v3/activity/e...questevent | 17:53 | |
seems like we could sub to those too. (might need dalek code change to lsiten) | 17:54 | ||
dalek | arVM: e7031d0 | niner++ | src/core/compunit.c: Fix Windows build broken by pointer arithmetic on void* |
18:08 | |
arVM: b441c94 | jnthn++ | src/core/compunit.c: Merge pull request #366 from niner/master Fix Windows build broken by pointer arithmetic on void* |
|||
arVM: 3198112 | tomboy64++ | / (3 files): update the build system to autodetect system provided libs - uses raw pkg-config to determine include directories - failover to the old behaviour when errors occur - fix DT_RPATH when @libdir@ has no / prepended |
18:19 | ||
arVM: 126cb2a | tomboy64++ | Configure.pl: small updates to the patch - test for existence of $config{pkgconfig} before attempting to run it - adding \n to error messages - re-adding entry to create include dir for libtommath |
|||
timotimo | ah, cool, the pkgconfig stuff landed? | ||
18:20
brrt joined
|
|||
timotimo | how expensive actually are guards that are 100% superfluous? | 18:23 | |
nine | infinite | 18:24 | |
jnthn | timotimo: Yeah, I gave it the promised "does this bust Windows" test, noted it didn't, and merged it | 18:25 | |
timotimo | in that case i can just remove a single guard that i can prove will never fail and moar will be infinitely better | ||
18:30
travis-ci joined
|
|||
travis-ci | MoarVM build errored. Jonathan Worthington 'Merge pull request #366 from niner/master | 18:30 | |
travis-ci.org/MoarVM/MoarVM/builds/129807202 github.com/MoarVM/MoarVM/compare/8...41c949cb11 | |||
18:30
travis-ci left
|
|||
jnthn is giving reframe-jit a spin | 18:30 | ||
timotimo | W: Failed to fetch downloads-distro.mongodb.org/repo/d...tion-en_US Unable to connect to downloads-distro.mongodb.org:http: | 18:31 | |
noooooo, not mongodb %) | |||
jnthn | bah | ||
timotimo | so our travis builds are failing because mongodb's repositories are down, eh? fantastic | 18:32 | |
jnthn | It'll work eventually :D | ||
timotimo | maybe "apt-get update" isn't the right thing to have in our travis configuration | ||
jnthn | Immediate working is overrated | ||
timotimo | i *guess* the travis images they're spinning up for testing are updated "in the background" every now and then | ||
jnthn | reframe-jit looking good so far | 18:39 | |
timotimo | jnthn: do you have an intuition if it's correct that going through a guard will increment the version of a register? or is it just that there was something there in the past that actually sensibly caused the increment and it just got kicked out in the mean time? | ||
jnthn | (up to S05) | ||
brrt | \o/ | ||
jnthn | timotimo: No, I highly doubt it | ||
Guards are inserted after SSA is formed | |||
And they only read | |||
Usage across a guard bumps the number of uses though | 18:40 | ||
timotimo | yup | ||
the more i consider "rebuild between successive passes", the more i gravitate towards "just do a complete, full rebuild, rediscover all facts, re-number all register versions" %) | |||
that speaks volumes about how confident i am about making spesh transformations that keep up a lot of useful invariants | 18:41 | ||
dalek | MoarVM/reframe: 13666ec | brrt++ | src/core/ (4 files): | 18:49 | |
MoarVM/reframe: Make frames identifiable using a sequence number | |||
MoarVM/reframe: | |||
MoarVM/reframe: Because frames can now be garbage-collected, they can be moved, and | |||
MoarVM/reframe: the identity check used in the JIT will no longer work. Thus, we'd | |||
jnthn | brrt: Merged; there's one comment on it from vendethiel that I'm not smart enough to understand right now, and I spotted a typo... :) | 18:50 | |
18:50
dalek joined
|
|||
jnthn | (Which is second comment) | 18:50 | |
Feel free to look at those :) | |||
brrt | oh, will look | ||
jnthn | (If you do any changes, just do them direct in reframe :)) | ||
Otherwise, I think I'm good to merge reframe to master :) | 18:52 | ||
vendethiel | jnthn: uh, I don't remember being "smart" at all recently. or even a long time ago | ||
jnthn | vendethiel: I'm generally exhausted this week, so if I don't understand something I'm defaulting to assuming it's me not having the brane for it. :-) | 18:53 | |
brrt | vendethiel: i think your comment is about the sizeof (MVMReturnType) | 18:54 | |
vendethiel | yes | ||
brrt | hmmm | ||
well, i'd rather have it at compile time , but i'm not sure that's possible | 18:55 | ||
vendethiel | why not? | ||
brrt | how? | ||
jnthn | sizeof(MVMReturnType) is a compile-time constant. | ||
brrt | #if sizeof(MVMReturnType) != 4 - not a preprocesor constant surely? | 18:56 | |
vendethiel | that's allowed | ||
sizeof() is compile-time, since the struct is compile-time | |||
jnthn | But yeah, now I see what the commnet was about. But I think it'll get constant folded | ||
vendethiel | well, not #if, because it's the CPP | ||
jnthn | Seems highly likely | ||
vendethiel | jnthn: thought so as well, but just making sure :) | 18:57 | |
jnthn | I can imagine something like Rakudo not nailing such a thing | ||
But C compilers have had some decades to get smart enough :) | |||
vendethiel | well, yeah | ||
but having a check here seemed... weird | |||
brrt | i agree | 18:58 | |
it's an old check though | |||
jnthn | Can't cash that... | 18:59 | |
Time for a walk, I think :) | |||
bbl | |||
timotimo | wait what, reframe goes into master, master goes into this month's release? | 19:09 | |
nwc10 | yes, if it's merged, it ends up in the release. So the question is "is it good enough to be in the release (or fixable by then)?" | 19:13 | |
jnthn | nwc10: I think "yes", in that the more risky of the two parts has been stress-tested to the point that we've fixed bugs that were in master too | 19:17 | |
And we've a week to understand any fallout. | 19:18 | ||
timotimo | well, i've checked it out locally in any case, so ... :) | 19:19 | |
i'll be trying it out | |||
jnthn | Anyone against pulling the trigger? | 19:20 | |
timotimo | wether or not it'll end up in this month's release | ||
brrt afk for now | 19:22 | ||
nwc10 | jnthn: ASAN is somewhere in th emiddle of a spectest | 19:28 | |
I think about 5 more minutes to go | 19:29 | ||
19:35
dalek joined
|
|||
nwc10 | jnthn: flapping assertion abort in t/spec/S17-supply/syntax.t | 19:35 | |
otherwise perfect | |||
paste.scsys.co.uk/513650 | 19:36 | ||
and not a new flapper | |||
timotimo | \o/ | 19:37 | |
it's about a mutex escaping the wrath of our code-gen again | |||
nwc10 | (and double checked, JIT was enabled) | 19:38 | |
that was MoarVM origin/reframe, nqp at 73befe524cde66b663e5c339e5304b973a8c71dc and rakudo at origin/moar/reframe | 19:40 | ||
I see from dalek's temporary departure that rakudo has moved on a bit | |||
jnthn | :) | 19:41 | |
timotimo | right, that seems to be nine's merge for load bytecode api work | ||
jnthn | Hm, maybe I should wait until tomorrow unless there's a little dust to settle from that :) | ||
nine | Yes, we now load modules without having to lock the files :) | ||
jnthn | uh, in case, not unless :) | ||
nine++ \o/ | |||
nwc10 | I think wiser to wait until tomorrow morning | 19:42 | |
jnthn | Aye | ||
OK, will do it then :) | |||
Thanks for testing | |||
nine | aaah...and I was so curious about the performance impact of reframe | ||
nwc10 | I've merged things locally - will re-run the ASAN build | ||
jnthn | nine: So significant difference for most programs yet, but this is mostly the big scary chance before a bunch of smaller optimization-focused changes. | 19:43 | |
um, *no significant | |||
Parallel programs are likely to get a more immediate win | |||
And things that keep thousands and thousands of closures around also. | 19:44 | ||
nine | Actually it may be wise to not merge right before going to bed anyway. I thought I had already learned that :) | 19:45 | |
timotimo | oh, reframe doesn't have the new bytecode op yet | 19:53 | |
i don't remember what code i recently discovered was crashy with reframe and which was heavily slowed down by competing to allocate frames | 20:03 | ||
ah, the logic puzzle with the prime numbers in the square | 20:05 | ||
it seems like there was another, different one, too | 20:07 | ||
ah, on my desktop! | |||
nwc10 | ASAN happy merged MoarVM and merged Rakudo and nqp master | 20:17 | |
timotimo | oh, we still go through the FSA? | 20:18 | |
jnthn | timotimo: Not for frames themselves, for env and work, yes | 20:26 | |
nwc10 | Ooh, I can disable the FSA and try ASAN again... | ||
jnthn | timotimo: env looks like it'll be a fairly easy move to the stack | ||
timotimo | cool | 20:30 | |
timotimo has already forgotten what the difference between env and work is; is env about things like autoviv and such? | 21:13 | ||
oh, probably lexicals vs locals | |||
jnthn | yeah, env is the lexical *env*ironment | 21:16 | |
work is working space, and the only time it ever outlasts a frame being on the stack is with continuations. | |||
mst | continuations overcomplicate everything | 21:17 | |
(I <3 continuations, but still) | |||
jnthn | That's probably why Perl 6 doesn't actually expose them directly :) | ||
(We have 'em for gather/take, and - in 6.d - await) | 21:18 | ||
mst | ah, so your continuations are only resume-once? | 21:21 | |
jnthn | Yes | ||
Which simplifies things. | |||
mst | the one use I've put continuations to that wasn't basically 'await' was ... the moral equivalent of the 'amb' operator from original lisp | ||
but that was because I was implementing a prolog derivative in an fexpr (i.e. operative) microlisp written in perl | 21:22 | ||
jnthn | Fun! | ||
mst | I'm now doing something more like minikanren's stream composition approach, which removes the need for multiple-resume | 21:23 | |
well, it does and it doesn't, but it pushes the problems into different corners of the design that cause me less pain | |||
timotimo | do we actually skip allocating a lexical environment for frames that don't have lexicals? | 21:28 | |
jnthn | yes | 21:30 | |
timotimo | nice, so when work moves away from FSA, we might have a bunch of frames that don't contend on the FSA at all | ||
jnthn | Should do | ||
Well, ->env will not need it either | |||
timotimo | it's still a bit hard to come by those in complex code, however | ||
jnthn | env is actually a far easier more than work | 21:31 | |
*move | |||
timotimo | oh! env is the one that's easier to move, not work | ||
i confused the two, sorry | |||
jnthn | Yup :) | ||
timotimo | so we should be optimizing our code to use only lexicals, no locals at all | ||
jnthn | I'll probably do it shortly after the monthly :) | ||
heh, it doesn't work like that :P | |||
timotimo | to make it work faster in multi-threaded situations :D | ||
jnthn | It's only good if you don't end up with a heap promotion | ||
timotimo | right | 21:32 | |
will we be getting any kind of diagnostic for that? | |||
jnthn | Yeah, in the normal allocation profiler, I expect. But not totally sure how to do it yet :) | 21:33 | |
timotimo | sounds good so far | ||
there's no way to make the locks on the FSA more fine-grained, right? | 21:34 | ||
like, one lock per size group or something silly like that | |||
jnthn | We can surely do better | ||
21:35
cognominal joined
|
|||
jnthn | Though need to do so very carefully. The original "better" lock-free implementation I did ended up with a really nasty AB bug. :/ | 21:35 | |
(Which, you might imagine, was hard to find.) | 21:36 | ||
timotimo | oh, yeah, that's pretty terrible :( | 21:38 | |
jnthn wanders of to some hopefully non-terrible sleep | 21:41 | ||
*off | |||
& | |||
timotimo | good luck! |