timotimo | huh ... i don't see rakudo-moar/HEAD excel at trim_string as comparde to rakudo-moar/2014.06; does that just mean the performance didn't regress through the rewrite and optimization pass? | 00:04 | |
japhb_ | jnthn, Some of the results show non-native string performance scales worse than native strings (meaning, the non-native case angles down, instead of flat across). for_concat_2 v. for_concat_2_native, for instance. | 00:06 | |
timotimo, Yeah, I think that's exactly it. Because IIRC, trim regressed really hard before his latest fixes. | 00:07 | ||
timotimo | it *could* be that we can't constant-fold $x ~ $x in one case, but in the other? | 00:08 | |
japhb_ | Interesting thought. | 00:09 | |
Oddly it looks like any_equals regressed a little bit since 2014.06 | 00:10 | ||
Hmmm, I need to fix the work estimate for trim_string, oops. | |||
And probably rat_harmonic too. | 00:11 | ||
japhb_ blinks twice at the plot for rc-self-describing-numbers | |||
timotimo | yeah | 00:12 | |
japhb_ | Now how the heck did *that* happen | ||
timotimo | it confused me, too | ||
did compile times increase a buttload? | |||
japhb_ | Yes, at one point, but I thought lizmat (mostly?) fixed that ...? | 00:13 | |
It was an S11 code performance bug | |||
timotimo | that was a regression that lasted only a few days at most | 00:14 | |
i don't think it went into any release, actually | |||
japhb_ | Agreed, I was just trying to remember (since I don't backlog #perl6 anymore, I miss out on info like that -- I was lucky to see that one in passing). | 00:17 | |
timotimo | well, i suppose in the weekly you only get the good news, not necessarily the bad ones that get fixed within the time frame | 00:21 | |
anyway, off to bed i go! | 00:28 | ||
[Coke] | ~~ | 00:32 | |
japhb_ | Oh yeah, the latest changes make a big difference to summary scores for nqp-moar/master and rakudo-moar/nom | 00:45 | |
By my estimates, the overall performance of nqp-moar has more than doubled in the last 6 months -- and the overall performance of rakudo-moar has *quadrupled*. | 00:46 | ||
[Coke] | moar is borked. | 00:47 | |
japhb_ | (startup/compile time excepted, of course) | ||
[Coke] | I did an upgrade, realclean, configure, get a ./perl6 that keeps saying: | ||
japhb_ | ankh-moarbork? | ||
[Coke] | ===SORRY!=== | ||
Missing or wrong version of dependency 'src/gen/m-CORE.setting' | |||
[Coke] tries wiping ./install and a git clean -xdf | 00:48 | ||
japhb_ | What about `make install; install/bin/perl6` ? | ||
[Coke] | already started the wipe. | 00:49 | |
wouldn't help since I'm doing spectesty things. | |||
must have been a stale build file that wasn't cleaned up. seems OK now. | 00:56 | ||
Internal error: zeroed target thread ID in work pass. whee. | 01:00 | ||
here's a backtrace for folks to play with: rt.perl.org/Ticket/Display.html?id=122297 | 01:11 | ||
01:30
FROGGS_ joined
01:35
colomon joined
|
|||
japhb | While trying to track down a missing data point in the rakudo-moar history, I discovered that rakudo-moar/2014.05 had a user-visible spesh failure running rc-mandelbrot. | 01:49 | |
Thankfully, nothing since. | |||
01:53
teodozjan joined
02:47
avar joined
03:13
dalek joined
03:20
japhb joined,
japhb_ joined,
woolfy1 joined,
nebuchadnezzar joined,
moritz joined,
itz_ joined,
hoelzro joined,
jnthn joined,
xiaomiao joined,
krunen joined,
nwc10 joined,
diakopter joined,
masak joined,
BinGOs joined,
ashleydev joined,
timotimo joined,
tokuhirom joined,
harrow joined,
cxreg joined,
camelia joined,
flussence joined,
TimToady joined
03:22
avar joined
03:23
ChanServ joined
06:16
ggoebel111118 joined
|
|||
sergot | o/ | 06:19 | |
06:57
woolfy joined
07:09
zakharyas joined
|
|||
nwc10 | jnthn: pass | 07:15 | |
brrt (who is not here): pass | |||
ie ASAN is happy | 07:16 | ||
(to the end of the spectests) | |||
diakopter | we should give the asan continuous integration bot a name. also, a cookie. | ||
07:28
teodozjan joined
07:35
jimmyz joined
|
|||
jimmyz | jnthn: I got a Segmentation fault : gist.github.com/zhuomingliang/5c8d...a39d2ba5cf | 07:35 | |
jnthn: when building core setting. | 07:36 | ||
diakopter | hm, deserialize_stable .. sounds like my code | 07:43 | |
FROGGS_ | jimmyz: would be interesting to know if that also fails under MVM_SPESH_DISABLE=1 | 07:55 | |
08:05
JimmyZ joined
|
|||
JimmyZ | FROGGS_: yes | 08:05 | |
08:13
brrt joined
|
|||
brrt | i sometimes wonder what'd have happened if instead of making the JIT compiler in C / DynASM i'd have started with the JIT compiler as a p6 module | 08:21 | |
jnthn | Lots of time doing encoding of instructions and figuring out how to get the spesh graph accessed in Perl 6 and plug the thing into the pipeline I guess... :) | 08:56 | |
brrt | yeah, i suppose so, too | 09:12 | |
09:22
klaas-janstol joined
|
|||
brrt | ok, seems i've learned a new dynasm trick | 09:24 | |
i can load addresses of labels at run time | |||
jnthn | ooh :) | 09:25 | |
brrt | importantly, that includes 'local' (non-bb) labels | ||
that also means that invokish ops need not be at the end of basic blocks | 09:26 | ||
jnthn | ah, good | ||
brrt | (is it invokey or invokish?) | ||
jnthn | I'm not sure we settled on that :) | ||
invokish is probably better | 09:27 | ||
brrt | invokey sounds american | ||
i'm good with either :-) | |||
jnthn | Well, can't be having that... :P | ||
Let's go with the British-sounding invokish. ;) | |||
brrt | :-) | 09:28 | |
diakopter | invokesque? | 09:40 | |
dalek | arVM/moar-jit: e47f5ca | (Bart Wiegmans)++ | src/ (6 files): Load address of entry label in JIT This will allow us to load addresses of labels that aren't start of basic blocks, and thus to deal with invokish ops without putting them at the end of basic blocks. |
09:45 | |
brrt | invokesque, i like | 09:47 | |
weird, update-ops drops the MVM_PUBLIC prefix for MVM_op_get_op | 09:49 | ||
should it have that? | 09:50 | ||
dalek | arVM/moar-jit: 3842c04 | (Bart Wiegmans)++ | / (3 files): Add 'invokish' field to opcode info The JIT needs to know if we've invoked something and whether we should return to the interpreter. This flags allows us to compile a guard. |
09:54 | |
brrt | hmm... anyone a good name for the invokish-guard-node? | 09:59 | |
10:00
japhb joined
10:01
nebuchadnezzar joined,
BinGOs joined,
masak joined,
diakopter joined,
nwc10 joined,
krunen joined,
xiaomiao joined,
jnthn joined,
hoelzro joined
10:03
japhb_ joined,
moritz joined,
itz_ joined,
flussence joined,
camelia joined,
cxreg joined,
harrow joined,
tokuhirom joined,
timotimo joined,
ashleydev joined,
TimToady joined
|
|||
brrt | bbi3h | 10:06 | |
10:07
brrt left
10:08
woolfy joined
10:49
woolfy1 joined
11:55
carlin joined
12:09
jnap joined
12:15
klaas-janstol joined
|
|||
timotimo | o/ | 12:20 | |
hoelzro | o/ timotimo | ||
dalek | arVM/moar-jit: 7a30d11 | (Bart Wiegmans)++ | src/ (11 files): Add support for invokish operators and decont Decont isn't actually compiled, though, so don't consider this 'tested' just yet. |
12:32 | |
12:32
brrt joined
|
|||
timotimo | oh, that was sudden | 12:33 | |
does the oplist actually have parsing for :invokish yet? | 12:34 | ||
jnthn | That was in the parent commit | 12:35 | |
timotimo | ah | ||
[Coke] | jnthn: did you see my moar segfault? | 12:37 | |
rt.perl.org/Ticket/Display.html?id=122297 | 12:38 | ||
jnthn | [Coke]: Yeah, saw you RT'd it. Thanks. | ||
I'll take a look after $dayjob. | |||
[Coke] | jnthn++ | ||
brrt | much wow, decont actually seems to work | 12:52 | |
timotimo | wowza. | 12:53 | |
that'll bring a whole slew of frames closer to completion in one fell swoop! | |||
[Coke] wonders if there are other swoop varieties. | |||
dalek | arVM/moar-jit: 6fd5469 | (Bart Wiegmans)++ | src/ (7 files): Add support for smart stringify / numify. This means that decont is also tested (and found to work). |
12:54 | |
timotimo | this is excellent news :3 | ||
jnthn | I've seen it miswritten as "one foul swoop" :) | ||
[Coke] | jnthn: mmmhehee | 12:55 | |
brrt | it doesn't exactly mean that the invokish guard actually works :-) i'm not sure if that code path is actually involved much | 12:56 | |
12:56
jnap joined
|
|||
brrt | unless_o was invokish, too, right? | 12:56 | |
jnthn | brrt: For decont not so often; but num/str then just numify an object with a Num method a load of times... | 12:57 | |
brrt: Yes, and if_o too | |||
brrt: 'cus they can call .Bool | |||
brrt | ok | ||
does this work in nqp or only in perl6? | |||
jnthn | istrue/isfalse also; they should be quite easy. | ||
if_o and unless_o show up all over teh place in perl 6 | |||
The use of smrt_* is in NQP-generated code | 12:58 | ||
We don't do it that way in full-blown Perl 6. | |||
Whenever you stringify a match object with ~ in NQP, it uses the smart stringify which calls a method, for example | |||
brrt | hmmok | 13:01 | |
jnthn | if_o and unless_o are harder as they want to branch *after* the method call... | 13:03 | |
brrt | oh... i see | 13:15 | |
jnthn | Yeah, they are amongst the funkiest of ops. | ||
brrt | o.O funky indeed | 13:17 | |
jnthn apologises for the funk | 13:18 | ||
They are common, though... | |||
brrt will find a way arround the funk | |||
jnthn | brrt++ | 13:20 | |
brrt | :-) | ||
dalek | arVM/moar-jit: 1d0f170 | (Bart Wiegmans)++ | src/ (3 files): Add support for istrue, isfalse |
13:26 | |
brrt | although i grant that it won't be very simple | 13:27 | |
jnthn | Well, an alternative is to desugar it into istrue and if_i | 13:29 | |
Needs a place for a temporary result. | 13:30 | ||
Which is the tricky-ish bit. | |||
Though an unused args slot may do | 13:31 | ||
brrt | i suppose that's true | 13:32 | |
diakopter | heh, talk about stack allocation | ||
brrt | if_o, unless_o, also require a place for a temporary result | 13:33 | |
jnthn | Yeah. | ||
I'd lean towards the desugar. | 13:34 | ||
brrt | because in the case that JIT -> boolify (interpreter) -> JIT back, i can't use a register (hasn't an address), and i can't properly use stack space either (we'll return from the JIT frame) | ||
me too | |||
jnthn | if_o and unless_o are worth it for the interpreter and keeping bytecode size down. | ||
But the JIT doesn't carry interpreter overhead and we're only paying this for hot paths of code we actually run. | 13:35 | ||
brrt | i can have the JIT graph builder do the desugar, i think? | ||
jnthn | Yes. | 13:36 | |
And use args[2] or so | 13:37 | ||
brrt | why args[2]? will the args buffer be used otherwise? | 13:38 | |
(probably, yes; the args[0] may contain the invocant) | |||
jnthn | Yes, args[0] will have the invocant, and in the unlikely case the invocant is a thingy with a postcircumfix:<( )> it may re-shuffle the args too. | 13:39 | |
timotimo | is there a plan to turn bunches of those c functions we call into in-linable assembly code at some point? | 13:40 | |
jnthn | Well, that's partly for spesh to do (and what it is doing already in places) | ||
For example, many calls related to attrs are turned into object accesses. | |||
timotimo | right | 13:41 | |
jnthn | And istrue and if_o on known types will be able to become cheaper too | ||
Since we can see the boolification spec. | |||
timotimo | right; i could build that code at some point | 13:42 | |
brrt | btw, there's one small annoyance i've just had - the MVM_args_get_pos_* return a struct, and that's not very cool in ASM land | ||
i.e. it can be done but there's hardly any official specification for it | |||
jnthn | Hm. What'd you prefer it to do? | 13:45 | |
Pass it a pointer to something on the stack and have it populate that, maybe? | |||
[Coke] keeps seeing if_o as some kind of weird smiley. | 13:47 | ||
13:48
woolfy1 left
13:51
woolfy joined
13:52
woolfy left
|
|||
carlin now also sees it as some kind of smiley, thanks [Coke] :| | 13:57 | ||
[Coke] | maybe a guy with a monocle? | 13:59 | |
brrt | jnthn - that's pretty much my preference, yes | 14:28 | |
jnthn | brrt: Feel free to refactor it that way | 14:29 | |
Will need changes in a few bits of the code, I suspect. | |||
brrt | ok, will do (in due course) | ||
jnthn | *nod* | ||
brrt | i suspect work[sf->work_size-1] would be a good address for the args buffer | 14:52 | |
or, in other words, how large is the args buffer? | |||
dinner & | 14:59 | ||
14:59
brrt left
|
|||
jnthn | Always at least 3-4 slots | 15:02 | |
[Coke] | S17-promise/allof.t 10 - got the right order | 17:00 | |
I just fudged the other moar failure (has an RT) | |||
so, that's the last one. | |||
looks like that test fails randomly. | 17:02 | ||
17:26
lizmat joined
17:28
mj41 joined
17:29
vendethiel joined
17:50
klaas-janstol joined
18:01
klaas-janstol left,
klaas-janstol joined
18:09
kjs2 left,
kjs2 joined
18:17
bcode joined
18:24
teodozjan joined
18:33
carlin joined
19:04
tgt joined
19:12
mj41 joined
|
|||
dalek | arVM/moar-jit: 8f5e4f0 | (Bart Wiegmans)++ | src/jit/graph.c: Added support for if_o and unless_o Due to general funkiness of if_o and unless_o operators, this is a bit hacky, but nevertheless effective. Boolification of objects is invokish in general. To deal with this, the interpreter supplies the boolification function with 'true' and 'false' continuation addresses. This is not feasibile for the JIT because bytecode addresses do not correspond directly to JIT addresses. So instead these ops are transformed as it were into the sequence of istrue / isfalse followed by if_i. Register space outside of the range of locals (that is to say, in the args buffer) is used to store the temporary result of istrue/isfalse. It is conceivable this might fail, but it seems to work now. c0d56a2 | (Bart Wiegmans)++ | src/jit/graph.c: Compute the last register index correctly Inlining changed the size of the work buffer, so it had to be recomputed. Unfortunately I'm not able to use the recomputed value in the spesh candidate as that structure is unavailable to the JIT. |
20:12 | |
20:12
brrt joined
|
|||
FROGGS_ | brrt++ | 20:13 | |
brrt | jnthn++ for suggesting the solution, by the way :-) | 20:14 | |
hmm let's not celebrate all the way yet, though | |||
it appears that nqp actually has a frame that has no args space (and thus, no locals) | 20:15 | ||
brrt wonders how it ever managed to call then | 20:16 | ||
ehm, not no locals | 20:18 | ||
jnthn | no locals? o.O | 20:19 | |
brrt | i'm wondering if it could be OK to increase the allocated size | ||
jnthn | I'm not sure how we can end up with a frame with no locals... | ||
brrt | no, i don't mean no locals, that's wrong :-) | ||
i mean no space for the args buffer | |||
jnthn | ... | ||
Every frame gets that, though. | 20:20 | ||
brrt | i supposed so | ||
jnthn | (See allocate_frame in frame.c for details) | ||
brrt | wait, i think i see | 20:25 | |
num_locals = 62, work_size=384byte (48 registers), dst reg=47 | |||
i think this is inlining and /me taking the wrong work size allocated | |||
jnthn | You need to look at spesh_cand->num_locals really | 20:26 | |
Or are you? | |||
And do we have the wrong size allocated? | |||
This could relate to the segv [Coke]++ RT'd earlier on... | 20:27 | ||
brrt | i think i'll show you :-) | ||
github.com/MoarVM/MoarVM/commit/8f...dd6a719a5d | 20:29 | ||
basically, i use the work_size of the staticframe, not of the spesh graph | 20:30 | ||
(i don't have the work size of the spesh graph, really) | |||
ah, i see | |||
work sizes are computed for candidates, not for spesh graphs, and they are related to the num_locals by the compunit max callsite size | 20:31 | ||
anyway, i still want the last register | |||
jnthn | Yeah, there you're using the work size of the static frame, which is going to be the wrong answer for anything with inlining. | 20:33 | |
And as you noticed, work_size lives in spesh_candidate | 20:34 | ||
But I guess we didn't compute that yet.. | |||
brrt | well, we did or did not, it's not important, i don't have the candidate in the jit graph building, just the spesh graph | 20:35 | |
repeating the computation is simple enough, of course :-) | |||
jnthn | You can figure it out, though, by doing num_locals + sf->body.cu->body.max_callsite_size | ||
Where num_locals is the one from the spesh graph | |||
Oh, and - 1 on the thing I just gave you. | |||
brrt | :-) | 20:36 | |
brrt is committing that as we speak | |||
and pushed | 20:38 | ||
brrt | i do notice two failing tests in nqp, although they seem to be parsing errors | 20:39 | |
jnthn | Well, you're likley JITting part of the parser... :) | 20:40 | |
brrt | true | 20:41 | |
but that would imply i've got errors, and... that'd be an issue | |||
jnthn | ;) | 20:42 | |
brrt | /if/ there's a bug, it's a subtle one, that's for sure | 20:44 | |
jnthn | Well, MVM_JIT_DISABLE will tell you ;) | 20:46 | |
brrt | it's a JIT bug :-( | ||
problem seems to be contained in smrt_numify / smrt_strify | 20:52 | ||
but let's see | |||
yep, smrt_numify is our problem | 20:55 | ||
seems kind of likely we're passing it the wrong thing | 20:56 | ||
we / i | |||
jnthn | Glad you could at least triangulate it quickly to one op | 21:00 | |
brrt | yes.. but i'm not sure about what to do with it | 21:02 | |
or 'why does this happen' | |||
jnthn | Well, could log what smrt_numify receives as args without JIT | ||
Then same with JIT | |||
And diff | 21:03 | ||
brrt | hmm yes | 21:04 | |
not sure how much that'll help, though, and i'm afraid it could also be a decont issue | 21:05 | ||
21:07
brother joined
|
|||
jnthn | bbi10 | 21:08 | |
brrt | hmm, now i suspect deocnt is the problem | 21:12 | |
smart_numify isn't the problem, that's for sure | 21:16 | ||
but why would decont be? | |||
(why wouldn't it, other question) | 21:21 | ||
y u no work! | 21:29 | ||
i'll look at this further tomorrow | |||
21:29
brrt left
|
|||
jnthn is having a hard time reproducing the SEGV [Coke] reported, or the related paste.scsys.co.uk/407476 | 22:10 | ||
timotimo | aaw, no working decont yet? :( | 22:15 | |
[Coke] | jnthn: the linux box is aborting the test, not sure if it's also segfaulting. my mac is definitely segfaulting. | ||
Do you have access to host07? | 22:16 | ||
weird. test fails when run as "prove -v -e t/fudgeandrun t/spec/integration/99problems-51-to-60.t", but not when run as ./perl6-m t/spec/integration/99problems-51-to-60.t (on host07) | 22:18 | ||
(with the fudge directive removed) | 22:19 | ||
ah. jnthn: try using this wrapper: | 22:20 | ||
#!/usr/bin/env perl | |||
exec "ulimit -t 120; ulimit -v 25000; ulimit -c 0; nice -20 ./perl6-m @ARGV" | |||
at some point, if you reduce the memory available, it segfaults. | 22:21 | ||
reduce it too much, you get nice: error while loading shared libraries: libc.so.6: failed to map segment from shared object: Cannot allocate memory | |||
at -v 25000 you get the segfault pretty quickly. | |||
s/the/a/, anyway | |||
(host07 lacks gdb, so I cannot verify) | |||
... no clue how to ulimit on windows. | 22:22 | ||
jnthn | Me either, which is where I've been trying to hunt it. | ||
22:24
jnap joined
|
|||
[Coke] | most of the stuff I see is "twiddle it after it's started", which doesn't seem to help. | 22:25 | |
jnthn: www.microsoft.com/en-us/download/de...x?id=20028 ? | |||
Looks like a more general tool than "limit my memory" | 22:26 | ||
Also - I asked for this for parrot ages ago - it'd be nice if moarvm took a parameter that limited how much memory it could allocate. | 22:29 | ||
22:44
lizmat joined
|
|||
jnthn | [Coke]: Hm, that didn't help much. I'll have to try it over on Linux, but too tired tonight. | 22:48 | |
22:48
woolfy joined
22:54
lue joined
|
|||
jnthn gets some rest & | 22:58 | ||
[Coke] | ah well. jnthn++ | 23:17 | |
timotimo | jnthn++ and gnite++ :) |