01:28
avuserow joined
01:54
FROGGS_ joined
06:53
zakharyas joined
07:00
JimmyZ joined
07:10
FROGGS joined
07:12
FROGGS joined
07:13
kjs_ joined
07:35
kjs_ joined
07:51
JimmyZ_ joined
08:01
odc joined
08:04
zakharyas joined
08:17
zakharyas joined
08:39
kjs_ joined
08:57
zakharyas joined,
zakharyas1 joined
|
|||
jnthn manages to catch the long-standing inline + GC segfault in his debugger :) | 09:03 | ||
frame->spesh_cand->num_locals | 09:07 | ||
195 | |||
195 * sizeof(MVMRegister) | |||
1560 | |||
frame->allocd_work | |||
1256 | |||
Yeah...that's bust. | |||
JimmyZ | jnthn++ | 09:42 | |
jnthn | Will known in the next 10 mins if I've managed to nail it, I think. | 09:43 | |
dalek | arVM: 17896bc | jnthn++ | src/gc/roots.c: Don't mark inlined locals for logging frames. When a continuation is taken involving a logging frame, it can easily end up living much longer than we might expect, and the specialization may complete without it. Make "not a logging frame" a condition for marking extra locals added due to inlining. |
09:57 | |
jnthn | FROGGS: Plesae can you see if this patch fixes github.com/MoarVM/MoarVM/issues/133 ? | 09:59 | |
timotimo | jnthn: did you have an opinion on building an sp_advancearriter opcode that'd let us turn a shift on an array iterator into a cheap advance op and then a direct pointer lookup with sp_get_*? | 10:02 | |
jnthn | timotimo: So we can JIT iterator stuff better? | 10:05 | |
timotimo | github.com/MoarVM/MoarVM/blob/mast...Iter.c#L52 - could make this switch obsolete and move all these error checks to the front | ||
yes | |||
i'm not sure to what extent nqp::iter is actually used inside perl6 code itself | 10:06 | ||
.o( well, shift in particular ) | |||
grepping for nqp::shift would probably give many cases of actually shifting stuff from arrays, too | |||
jnthn | Yeah, I think it's more used in NQP code | 10:07 | |
Maybe it's wait until after Austria | |||
Because then we'll understand the GLR needs a bit better | |||
timotimo | gotcha | ||
i'm looking for simple-ish tasks to pull myself out of writer's block or whatever it is i'm having | |||
dalek | arVM: 0df2d6f | jnthn++ | src/core/interp.c: Fix crash upon trying to clone a type object. Closes #128. |
10:11 | |
jnthn | timotimo: Hm, so quick-reward things? | 10:13 | |
timotimo | i think so | 10:14 | |
jnthn | timotimo: Making the profiler still give output if the program dies with an exception is not too hard, I think. | 10:15 | |
timotimo: Also you could look at depth limiting, so that it aggregates results below a certain call-tree depth when building the output | |||
timotimo: So that then the data for CORE.setting would be useful | 10:16 | ||
timotimo | i had a quick glance at the depth limiting, but it looked like if i did the "obvious" change it'd ignore data from the innermost frames, too | ||
jnthn | I was going to do it by recording all the data | 10:17 | |
And then just trimming it when we turn it into data structures | |||
'cus the recording of all the data is in quite compact C data structures | |||
Whereas the thing we use to produce the JSON grows huge. | |||
timotimo | ah, aye | 10:18 | |
so the change would be in the nqp code rather than the c code? | |||
jnthn | No, I was going to do it in the C code | ||
But in the C code that builds the data structures | 10:19 | ||
Lemme show you where...momnet | |||
dump_call_graph_node in src/profiler/profile.c | |||
timotimo | mhm | 10:20 | |
jnthn | timotimo: I pondered adding an extra arg to that recursive routine | 10:22 | |
timotimo: That is depth | |||
timotimo: And if it passes a threshold, do something different with the succs beneath it | 10:23 | ||
timotimo | right; the only thing we'd need then is to calculate and remove the exclusive time, no? | ||
but we'd leave the callees list empty | 10:24 | ||
jnthn | Well, "leave callees list empty" is one way to go | ||
But then we miss out on data | 10:25 | ||
10:25
FROGGS joined
|
|||
timotimo | even if we still recurse and calculate all ze stuff? | 10:26 | |
jnthn | I was pondering that we could somehow aggregate the data below that point into a single node | ||
And insert a node with a name like <AGGREGATED_42> or so | 10:27 | ||
timotimo | hm. flatten out and then aggregate the callee's tree? (or rather: generate the aggregated callees node directly rather than building a tree and then flattening it) | ||
jnthn | timotimo: I was going to make a node and then write a different recursive thing over succs that we pass that node to | 10:29 | |
timotimo: And then it just aggregates the data into that one node | |||
timotimo | mhm mhm | ||
would that aggregate node have all the callees, then? | 10:30 | ||
or would it be a much simpler node? | |||
jnthn | Well, I was thinking a single node. | ||
You don't have to worry about times | |||
Well; | |||
Hmm | |||
timotimo | hm, so what exactly would be aggregated? all entry counts below that point in the tree? | ||
jnthn | Actually better I think would be to make it so if we have | 10:31 | |
timotimo | also, i haven't looked deep into how the allocations data looks | ||
i think that's "beside" the tree | |||
jnthn | No, it's in the tree | ||
...loads of nodes down to limit... -> node hitting limit | |||
And below that node we had succ1 -> blah | |||
succ2 -> [blah2 -> blah3, blah4 -> blah3 -> blah5] | 10:32 | ||
Then we'd end up with the node that hit the limit having a flat bunch of children | |||
succ1, succ2, blah2, blah3 (which aggregates), blah4, blah5 | |||
Then we still get all the per-routine timings right. | 10:33 | ||
And then further annotate those flattened out children with an extra key in the hash | |||
timotimo | the key being just a signal for "this is an aggregate node"? | 10:34 | |
jnthn | So in the UI instead of seeing a graph below a certain point, you just see a list of things that got called | ||
Right | |||
Well | |||
Not even aggregate in some cases | |||
I mean, if there's just a chain of calls below a certain point, we'd have raised them all up to immediate children of the node when we reached the depth limit | 10:35 | ||
timotimo | mhm | ||
jnthn | That is, we turn a tree into a set, and aggregate if we see multiple nodes for the same static frame | ||
timotimo | mhm | 10:36 | |
does it seem like a good or bad idea to just keep that a list and do linear searches to see if a given routine/frame has already been added to that set? | |||
jnthn | Linear search is OK here | ||
I think the thing that blows up CORE.setting compilation is hugely deep chains of as_mast calls or whatever we call it | 10:37 | ||
As in, the profile of CORE.setting compilation | |||
timotimo | mhm mhm | 10:38 | |
jnthn | And there's only around 10-20 candidates | ||
timotimo | and perhaps parts of the parse tree that go pretty deep? | ||
jnthn | Maybe in places | 10:39 | |
FROGGS | jnthn: lemme see (MoarVM#133) | 10:48 | |
hmmm, I've got problems accessing github :o/ | 10:50 | ||
jnthn: #133 is solved, aye | 11:03 | ||
err, jnthn++ even :o) | |||
jnthn | \o/ | 11:04 | |
I figured that may be the same bug :) | |||
12:05
JimmyZ joined
|
|||
dalek | arVM/esc: f03cb5e | jonathan++ | / (4 files): Start annotating ops that allocate. |
12:16 | |
arVM/esc: 236c7a8 | jonathan++ | src/spesh/dump.c: Add dump support for escape information. We're not recording any yet. |
|||
arVM/esc: a19689a | jonathan++ | src/spesh/ (3 files): Start recording allocation sites. |
|||
jnthn | masak++ helped with those too | 12:17 | |
(They're from yesterday, at BJ airport) | |||
masak | jnthn: I'm guessing you found/fixed the segfault? :) | 12:36 | |
jnthn | masak: Oh...no, that was uncommitted so the patch still lives on my laptop | 12:37 | |
masak | ah ha. | ||
JimmyZ | jnthn: looks like missing break after 'found = 1' in 236c7a81b1 | 12:50 | |
jnthn | JimmyZ: That's probably more efficient, though makes no difference to correctness | 12:53 | |
JimmyZ | aye | ||
jnthn | Feel free to tweak it. | 12:54 | |
dalek | arVM/esc: 0c32ff2 | jimmy++ | src/spesh/dump.c: add missing break |
12:58 | |
13:38
FROGGS[mobile] joined
13:46
FROGGS joined
14:30
FROGGS joined
16:08
JimmyZ_ joined
17:09
vendethiel joined
|
|||
dalek | arVM: 685ad32 | jnthn++ | src/main.c: Improve usage, include environment variables. |
17:18 | |
17:51
Ven joined
18:47
brrt joined
|
|||
brrt | \o | 18:55 | |
18:57
Ven joined
|
|||
jnthn | o/ brrt | 18:59 | |
brrt | hi jnthn | ||
back from china | |||
? | |||
jnthn | Yes :) | ||
brrt | glad to be home? i would be :-) | 19:02 | |
ehm... did we implement clone in the JIT? | |||
jnthn | Yes, very :) | 19:03 | |
Oh, good point about the clone thing. Hmm. | |||
brrt | oh, we do that by calling MVM_repr_clone | 19:04 | |
so we can just update that definition | |||
hmm.. | 19:08 | ||
i wonder if we could allocate some register space for temporary roots | |||
that way, it'd be easier to use in the JIT directly | 19:09 | ||
dalek | arVM: cedaaa3 | (Bart Wiegmans)++ | src/6model/reprconv.c: Fix concreteness test for the reprconv. This also closes #128, but now for the JIT. |
19:17 | |
arVM: b4dd2f0 | (Bart Wiegmans)++ | src/main.c: Document bytecode directory environment flag |
19:19 | ||
brrt | 'software maintenance' :-) | 19:20 | |
20:12
lizmat joined
20:44
brrt left
21:05
japhb joined
21:45
kjs_ joined
22:27
kjs_ joined
|