00:10
jnthn joined
00:55
patrickz_ joined
00:59
evalable6 joined
02:16
TimToady joined
02:57
Voldenet joined
02:59
ilbot3 joined
03:25
Voldenet joined
04:29
samcv joined
04:51
BinGOs joined
06:04
releasable6 joined,
greppable6 joined
06:05
squashable6 joined
06:17
AlexDaniel joined
06:39
brrt joined
07:09
brrt joined
07:11
domidumont joined
07:16
geospeck joined,
domidumont joined
07:35
reportable6 joined
07:47
brrt joined
08:08
lizmat joined
|
|||
lizmat | jnthn: re making let/temp use IterationBuffer: gist.github.com/lizmat/155cc1e437f...054b603099 | 09:45 | |
alas, this does not do the trick: MVMArray: Can't shift from an empty array | 09:46 | ||
am I missing something? | |||
afk for a few hours& | |||
jnthn | lizmat: Apparently, though I've no guesses about what just looking at the patch. | 10:13 | |
lizmat | ok, thanks for the sanity check | 10:19 | |
apparently I'm not going to be away for a few hours after all | 10:20 | ||
m: use nqp; my $a := nqp::create(IterationBuffer); Nil while $a # the reason | 10:38 | ||
camelia | (timeout) | 10:39 | |
lizmat | jnthn: just wondering, is there a reason why "my %h = a => 42; %h.AT-KEY("a") for ^10000000" should not get inlined ? | 12:57 | |
lizmat means the call to Hash.AT-KEY of course :-) | 12:59 | ||
dogbert17 has made some updates to github.com/MoarVM/MoarVM/issues/754 | 13:09 | ||
13:18
arnsholt joined
|
|||
jnthn | lizmat: Yeah, we need to split AT-KEY into a small method that returns the value if the key is ther, and a private method that has the auto-viv closure | 13:20 | |
lizmat: We can inline a call *to* a closure. We can't inline something that *takes* a closure. | 13:21 | ||
lizmat | oki | ||
gotcha | |||
jnthn | Same for AT-POS in Array fwiw | ||
lizmat | yup | 13:22 | |
will take that on | |||
jnthn | I don't know if we ever can inline something that takes closures | ||
Because the ->outer of the captured code object needs a MVMFrame to point at | |||
Unless we somehow make that MVMFrame + index, but I suspect there's a lot of trickiness there | |||
lizmat | ooh, wow, it's now gotten so smart that in a 10M loop, it just stops calling AT-KEY after about 10K times | 13:35 | |
my %h = a => 42; %h.AT-KEY("a") for ^10000000 # jnthn: could that be possible ? ^^^ | |||
jnthn | Just stops calling it? :) | 13:38 | |
lizmat | well, in --profile it looks like | ||
only 9832 calls to Hash.AT-KEY, and mostly red | 13:39 | ||
otoh there's a <anon> with 19990168 calls, which is 2M - 9832 | 13:40 | ||
so I guess it's some --profile artefact | |||
fwiw, this makes AT-KEY about 1.7x as fast in this benchmark | 13:41 | ||
let's see if it survives spectest :-) | 13:42 | ||
jnthn | It should give you an inline ratio also on the first summary page | 13:55 | |
lizmat | "Inlining eliminated the need to create 9990168 call frames (that's 33.3%)." :-) | 14:02 | |
hmmm... although the % seems to be off: | 14:03 | ||
In total, 20009857 call frames were entered and exited by the profiled code. Inlining eliminated the need to create 9990168 call frames (that's 33.3%). | |||
m: say 9990168 / 20009857 | |||
camelia | 0.499262339 | ||
lizmat | m: say (20009857 + 9990168) / 20009857 | 14:04 | |
camelia | 1.499262339 | ||
lizmat | ok, like that :-) | ||
jnthn | yes :) | 14:15 | |
dogbert17 | more more :) | 14:17 | |
lizmat | jnthn: looks like Array.AT-POS already abstracted container creation into a separate private method | 14:32 | |
jnthn | Ah, OK | 14:48 | |
lizmat | hmmm.. still, AT-POS is not getting inlined :-( | 14:52 | |
lizmat looks again | |||
jnthn: ah, probably the $*INDEX ? | 14:53 | ||
jnthn | lizmat: At the top of src/spesh/optimize.c there's a | 14:57 | |
#define that you can uncomment | |||
uh, not uncomment | 14:58 | ||
But turn from 0 to 1 | |||
It dumps out on stderr why it could or couldn't inline things | |||
timotimo | which AT-POS are we looking at? | ||
since there's multiple multis | |||
lizmat | Array.AT-POS | ||
jnthn | Just tweak it and then make -j install in the MoarVM folder. No need to rebuild NQP or Rakudo | ||
timotimo | looking up a dynamic var shouldn't prevent inlining, or should it? | 14:59 | |
jnthn | Shouldn't | 15:00 | |
Even declaring one wouldn't | |||
timotimo | could the my $todo prevent it? | 15:01 | |
jnthn | oh...what | 15:03 | |
That method is giant | |||
lizmat | yeah, looking at making the common case smaller :-) | ||
timotimo | hm, yeah, there's many invocations, those each cost a couple of instructions | ||
jnthn | Yeah, I bet it's over the size limit | 15:04 | |
lizmat is working on making the common case smaller :-) | |||
15:06
brrt joined
|
|||
timotimo | maybe CArray can also get a little pass looking at inlinability | 15:09 | |
15:42
zakharyas joined
15:49
zakharyas joined
15:54
zakharyas joined
16:03
zakharyas joined
16:06
domidumont joined
16:11
zakharyas joined
16:31
zakharyas joined
17:06
zakharyas joined
18:29
Ven`` joined
19:36
unicodable6 joined,
bisectable6 joined,
committable6 joined
20:33
benchable6 joined
21:05
zakharyas joined
21:32
TimToady joined
22:48
AlexDaniel joined
|