|
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
|
|||