japhb | jnthn: In your newest 6guts: "This ran in 5.12 seconds, with 0.8s startup/compilation time, so let’s call it 5 seconds for the iterations" Did you mean .08s startup/compilation time? That makes more sense in context (and also closer to the startup speed I expect from perl5). | 00:35 | |
timotimo | oh, did i miss a 6guts? | 00:38 | |
i did! | |||
01:50
ggoebel16 joined
03:50
ggoebel16 joined
05:50
vendethiel joined
06:23
mojca joined
07:18
domidumont joined
07:23
domidumont joined
07:25
vendethiel joined
07:45
domidumont joined
08:19
zakharyas joined
08:44
mojca_ joined
09:25
FROGGS joined
|
|||
jnthn | japhb: Yes, just a thinko transcribing the numbers from the console. :-) | 09:38 | |
Fixed; thanks! | |||
timotimo | jnthn: i left a message with yoleaux for you :) | 10:17 | |
10:57
mojca joined
11:45
dalek joined,
synopsebot6 joined
13:36
[Coke] joined
14:26
mojca_ joined
14:51
brrt joined
15:11
FROGGS joined
15:23
brrt left
15:44
hoelzro joined
16:41
donaldh joined
|
|||
jnthn | m: say 425911947 / 428605860 | 16:47 | |
camelia | rakudo-moar c7be33: OUTPUT«0.9937147080» | ||
jnthn | m: say 425911947 R- 428605860 | 16:48 | |
camelia | rakudo-moar c7be33: OUTPUT«2693913» | ||
timotimo | from ulti's jitlog i can only see very few jit graphs that are aborted after reaching an inline | 16:55 | |
take-rw is one, though. it goes into THROW, then bails at bindexpayload | 16:56 | ||
redo goes through THROW-NIL and bails at bindexcategory there | |||
that's really all i could see | |||
jnthn | Yeah, I suspect those control operators are now inlined | 16:57 | |
That'd mean it can't JIT the entire enclosing loop | 16:58 | ||
timotimo | except if that's the case, it'd show up in the jit log as entering that inline, no? | ||
so wouldn't it just emit an invocation instead? | |||
donaldh | PR to fix dyncall on raspberrypi github.com/MoarVM/MoarVM/pull/344 | 17:00 | |
jnthn | timotimo: No, we inline during spesh | 17:01 | |
And JIT the result | |||
So inlining something we can't JIT means we can't JIT the thing that it was inlined into | |||
timotimo | yeah, but if we've inlined something we can't jit, it'll show up in the jit log as "constructing graph for blah", then "entering inline for foo", then "bail" | 17:03 | |
the fact that the jit log contains redo and take-rw as "constructing graph", rather than as "entering inline" is what i'm interpreting | |||
jnthn | ah | 17:04 | |
timotimo | how do i best interpret it when a profile shows a crazy amount of time spent in find_best_dispatchee? | ||
dalek | arVM/lazy-strings: 3c5d4fe | jnthn++ | src/ (2 files): A more robust strings JIT fix. All uses of the get_string macro were potentially vulnerable to the string not having been decoded yet, so this moves the check into the macro. Also introduce another little function, just to have a clean way to express that we don't want the string itself, just to be sure it's decoded. |
17:08 | |
arVM: eff150a | jnthn++ | src/ (4 files): First pass at making string decoding lazy. That is, we only do it the first time a string from the string heap is needed. Not quite right yet; we SEGV one of the NQP tests. But close. |
|||
arVM: a501a41 | timotimo++ | src/jit/emit_x64.dasc: force sp_findmeth to decode strings in the CU makes nqp build&test and rakudo build. |
|||
arVM: 3c5d4fe | jnthn++ | src/ (2 files): 7170f69 | donaldh++ | src/core/nativecall_dyncall.c: Dyncall docs say 'This function should be called after setting the call mode (using dcMode), but prior to binding arguments to the CallVM'. Likely to be redundant on many platforms, but is the documented API behaviour. |
|||
timotimo | neat :) | 17:09 | |
jnthn | timotimo: It probably has late-bound multi-dispatch (where clauses etc.) | ||
timotimo | oh | ||
that also includes signatures on &sigiled things, then? | 17:10 | ||
jnthn | The above gives us 1.26MB off Rakudo's base memory, and shaves around 2.7 million CPU instructions off startup | ||
timotimo | sweet! | ||
17:10
FROGGS joined
|
|||
timotimo | find_best_dispatchee is difficult for me to analyze as it doesn't actually seem to show up in the call graph itself | 17:11 | |
or maybe i'm just blind | |||
jnthn | Other thing is it could be overflowing the multi cache, but that's rare | 17:12 | |
Time to go work on dinner prep :) | 17:13 | ||
timotimo | mhh :) | ||
arVM: 21d0ef3 | FROGGS++ | src/core/nativecall_dyncall.c: Merge pull request #344 from donaldh/master Fix dyncall on raspberrypi for calls > 4 params |
|||
timotimo | good catch, donaldh | ||
FROGGS | aye | 17:15 | |
donaldh++ | |||
17:26
donaldh joined
|
|||
timotimo | i don't 100% get why the accessor in jnthn's blog post gets turned into p6oget_o, p6ogetvc_o and another p6oget_o; perhaps there's a Scalar in-between? or something? | 17:34 | |
the output of that code could be a bit better still if we didn't save the contents of $_ unnecessarily :) | |||
jnthn | timotimo: cooking but: decont of self, get the attr from self, decont the attr | 17:38 | |
timotimo | ah, ok | 17:39 | |
now if we had loop-invariant code motion, the loop body could become completely empty ;) | |||
17:56
domidumont joined
18:22
donaldh joined
18:49
vendethiel joined
19:31
mojca_ joined
|
|||
[Coke] | jnthn++ | 20:04 | |
timotimo | do we know why the CORE.setting.moarvm starts with a few pages full of 00000210: 0800 0800 0800 0800 0800 0800 0800 0800 ................ | 21:23 | |
000019f0: 0800 0800 0800 0800 0700 0800 0800 0800 ................ | |||
^- here's the first time the values are changed, it looks like | |||
jnthn | What segment is that? | 21:26 | |
The string heap is usually the first thing in there | |||
Oh, maybe not | 21:27 | ||
timotimo | it isn't; i've reached the string heap now | ||
jnthn | Yeah | ||
It's the SC dependencies section | |||
timotimo | and that contains like four or five screen pages that look very much like this: | ||
jnthn | Or the extop section | ||
timotimo | 00181c90: 5f35 375f 3134 3537 3338 3234 3334 2e37 _57_1457382434.7 | 21:28 | |
00181ca0: 3836 3735 3800 0000 616c 745f 6e66 615f 86758...alt_nfa_ | |||
00181cb0: 5f31 315f 3134 3537 3338 3234 3334 2e33 _11_1457382434.3 | |||
00181cc0: 3539 3035 3800 0000 616c 745f 6e66 615f 59058...alt_nfa_ | |||
00181cd0: 5f37 355f 3134 3537 3338 3234 3335 2e30 _75_1457382435.0 | |||
i wonder if we can get these strings deduplicated? i don't think we'd really need this? | |||
jnthn | They're not duplicates? | ||
The IDs differ | |||
Seems the order is SC dependencies, extension ops, frames (including their lexical and local types), then callsites, and only then strings | 21:29 | ||
timotimo | the leap second dates are apparently in there as strings, that's interesting | 21:31 | |
i.imgur.com/XNy7slW.png - this amuses me %) | 21:34 | ||
and of course like a thousand pages full of cuid_*_*.* | 21:35 | ||
like, seriously, a *lot* of cuid strings | 21:36 | ||
jnthn | :) | 21:41 | |
The errors there are exactly the kind of thing I figured we could just lazily decode :) | |||
timotimo | aye | 21:42 | |
jnthn | Enough for today :) 'night | 21:51 | |
FROGGS | gnight jnthn | 21:52 | |
timotimo | gnite jnthn | 21:53 |