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!