|
01:09
FROGGS_ joined,
jnap joined
02:02
vendethiel joined
02:10
xiaomiao joined
02:59
colomon joined
03:19
woosley joined
03:34
woosley joined
06:49
brrt joined
06:53
zakharyas joined
|
|||
| brrt | \o #moarvm | 06:55 | |
| i was planning to get at deopt today | |||
| i just wonder | 06:56 | ||
| how to test it | |||
|
07:10
lizmat joined
07:24
woolfy joined
|
|||
| timotimo | throw a role onto something? :) | 08:21 | |
|
08:28
brrt joined
|
|||
| brrt | hmm | 08:43 | |
| i might | |||
| timotimo | i hope that actually does it | 08:49 | |
| moritz | the question is: what's optimized that might need a deopt? | 08:50 | |
| timotimo | anything that does an invocation will give a deopt point and i think we just deopt a whole bunch as soon as we see such a change | ||
| jnthn | Well, that'll be a deopt_all if you mix in | 08:54 | |
| A deoptone is less usual, though we hit a bunch of them when building NQP | 08:55 | ||
| One way is to have an attribute that contains something of a certain type, look it up in some code you call again and again so it ends up guarding against it, maybe call a method on the thing you looked up to make sure the guard gets used for something. | |||
| And then change the attribute to somehting of a different type and do another invocation. | |||
| Thing is, I don't think the JIT does attribute lookup stuff yet...which get turned into the various p6oget ops. And only an object attribute is interesting. | 08:56 | ||
| Return values from things we call are also guarded. | |||
| But I don't know the JIT does invocation yet | |||
| getlex of an object may do it | 08:57 | ||
| so not sure anything that uses guard clauses yet will JIT compile due to it also using another NYI thing. | |||
| brrt | JIT doesn't do invocation, no | 09:18 | |
| not yet | |||
| hmmkay | 09:19 | ||
| jnthn | yeah, so may be some other things to do first | 09:22 | |
| jnthn suggests attribute binding and looking with the sp_p6o* ops | |||
| brrt | yes, i agree | 09:23 | |
| also bindlex / getlex | |||
| oh i have a question about that, or rather had, and am now trying to renember what it was | |||
| jnthn | ok | 09:25 | |
| lunch, but bbiab | |||
| brrt is going to have lunch in a bi too | 09:27 | ||
|
09:45
vendethiel joined
10:02
vendethiel- joined
|
|||
| jnthn hopes brrt enjoys lunch in a bi... : | 10:12 | ||
| :) | 10:13 | ||
| nwc10 | jnthn: ./perl6-m t/spec/S17-promise/allof.t goes SEGV on ASAN with *and without* spesh | 10:19 | |
| jnthn | I'd tend to expect concurrency related failures to be fairly independent of that | 10:20 | |
| nwc10 | not really in a positionto dig further | ||
| jnthn | They're hard to debug, though, and I've not had undistracted chunks of time to look yet. | ||
| May have some time tomorrow. But in practice...I'm kinda ill :( | 10:21 | ||
| And 10 hours of sleep last night didn't fix it. | |||
| nwc10 | :-( | 10:34 | |
| this3G is pants | |||
| #0 0x7f8da51fe111 in MVM_fixed_size_alloc src/core/fixedsizealloc.c:121 | 10:35 | ||
| #1 0x7f8da51fe211 in MVM_fixed_size_alloc_zeroed src/core/fixedsizealloc.c:144 #2 0x7f8da5189c80 in allocate_frame src/core/frame.c:201 | |||
| #3 0x7f8da518b221 in MVM_frame_invoke src/core/frame.c:344 | |||
| #4 0x7f8da52794f8 in invoke_handler src/6model/reprs/MVMCode.c:10 | |||
|
10:37
brrt joined
10:46
brrt left,
brrt joined
|
|||
| brrt | jnthn, here? | 10:49 | |
|
10:51
vendethiel joined
|
|||
| brrt | did you know that register offsets in x86 memory access may be 32 bits wide? | 10:54 | |
| i'm opening yet another page to understand the redirection involved in sp_p6oget_o :-) | 11:01 | ||
| bbiab | 11:02 | ||
|
11:02
vendethiel- joined
11:24
brrt joined
11:25
brrt left
|
|||
| jnthn | nwc10: Oh wow, that is interesting place to explode... | 11:32 | |
| nwc10: Do you have the ASAN output describing the problem handy? | 11:34 | ||
| I'm wondering if it's some kind of freelist corruption... | |||
| (e.g. the fle->next) | |||
|
12:02
brrt joined
|
|||
| brrt | hmm... so at least sp_p6oget_o compiles | 12:03 | |
| oh, isn't correct yet | |||
| timotimo | do we have a good plan yet to make rakudo itself more inline-friendly? | 12:04 | |
| i seem to recall it's about having handlers everywhere | |||
| i think at one point we said "handlers are ridiculously cheap on moarvm" | |||
| if that was the case back then, now it's different :) | |||
|
12:05
colomon joined
|
|||
| brrt | why aren't handlers cheap? | 12:06 | |
| timotimo | because (iiuc) they prevent inlining from happening | 12:07 | |
| brrt | i have not enough rakudo-knowledge to consider that | ||
| ooh... | |||
| hmmmm | |||
| timotimo | ISTR it's about every sub having a handler for "return" | 12:08 | |
| though i think there's a method somewhere called "is_clearly_returnless" | |||
| maybe in that case we could just not emit the handler? i don't know. | |||
| jnthn | timotimo: It's not horribly difficult to merge handler tables for inlining. | ||
| timotimo: It's just some work that I didn't get around to yet. | |||
| timotimo | oh! | ||
| well, fair enough :) | |||
| jnthn | Same with extops. | 12:09 | |
| The inline branch was "make the basic inlining and deopt work", not "do everything imaginable" :) | |||
| timotimo | fair enough | ||
|
12:09
jnap joined
|
|||
| jnthn | Better to merge branches early provided they don't actually regress stuff knowingly, and get the feedback : | 12:09 | |
| timotimo | what's your plan with extops, btw? is there some way to have multiple "tables" of extops so we can just use the tables from other SC's or so? | 12:10 | |
| jnthn | Also, I'm so getting a repair person out for this laptop...to fix my key. | ||
| timotimo | or do we have to merge them and change the numbers for the extops to match up again? | ||
| jnthn | ) key...how ironic. | ||
| timotimo | temporarily map printscrn to ) or something? :) | ||
| jnthn | Not sure quite how I'll do it yet... | ||
| moar teaching & | 12:12 | ||
| brrt | see you | ||
|
12:14
brrt left,
brrt joined
|
|||
| brrt | ugh, empathy doesn't increase font size with the 'big text' button | 12:15 | |
| oh, does after restart | |||
| (between 3 and 5 levels of indirection for the 'fast path' of sp_p6oget_o. o.O) | 12:16 | ||
| timotimo | and those indirections are all going to stay in the jitted version? | 12:17 | |
| brrt | yes | ||
| timotimo | well, it'd appear that'd be necessary | ||
| brrt | hmmm | ||
| some of these may change | |||
| jnthn | 5? :) | 12:18 | |
| brrt | yes | ||
| let me see if i count that right | |||
| in the good case, we'd be able to reduce that to 2 | |||
| i think | 12:19 | ||
| but in the bad case, the data of the object has been replaced with something, and is then null and should be replaced with vmnull | |||
| that is where that comes from | |||
| jnthn | yeah, 5 if you hit all the slow paths | 12:20 | |
| I think just JIT the whole thing, though | |||
| brrt can count the mov instructions | |||
| jnthn | :) | ||
| brrt | of which two are necessay load-stores from mvm registers | ||
| or at least somewhat-necessary | |||
| jnthn | *nod* | 12:21 | |
| FROGGS_ | brrt's Jnthn Nod RateĀ® is outstanding, just wanna mention it | 12:23 | |
| brrt | the JNR :-P | ||
| FROGGS_ | :o) | 12:24 | |
| I'm like below .1% :o) | |||
| brrt | but what does it signify? | ||
| dalek | arVM/moar-jit: 5532c65 | (Bart Wiegmans)++ | src/ (5 files): Add support for direct reading of p6opaque fields |
||
| brrt | what is the difference between sp_p6ogetvt_o and sp_p6ogetvc_o and sp_p6ogetvc_o | 12:28 | |
| timotimo | are the last two actually different at all? | 12:30 | |
| brrt | i.. think they are | 12:31 | |
| yes they are | |||
| timotimo | :P | ||
| brrt | the latter version clones | 12:32 | |
| brrt wonders about bbq-ing this evening | 12:39 | ||
| timotimo | please don't bbq the evening | 12:45 | |
| brrt | dutch grammar english mistake :-) | 12:51 | |
| weathermen said it'd be good enough, but i doubt it | |||
| the weather that is | |||
| timotimo | :3 | 12:52 | |
| brrt | (jit compiling the write barrier is a bit of a pain, but doable) | 13:00 | |
| TimToady theorizes that jnthn++ hits the ) harder because he's closing out parenthesized expressions with great satisfaction | 13:01 | ||
| TimToady also wonders whether brrt's lunch fit him to a t | 13:06 | ||
| brrt | my lunch? was fine, thank you :-) | ||
| i was rather starved due to no breakfast | 13:07 | ||
| brrt bbiab | 13:10 | ||
|
13:12
colomon joined
|
|||
| jnthn | vt = vivify with type object, vc = vivify with concrete object (and thus clone it) | 13:13 | |
| mmm...crispy bbq evening | 13:14 | ||
| TimToady | well, you had lunch in a bi, and thought you might pick up a t along the way | 13:31 | |
| oh, he's no here | 13:32 | ||
|
13:32
brrt joined
|
|||
| TimToady | oh, yes, he is here :) | 13:32 | |
| de-elevating & | 13:33 | ||
| brrt | haha ok | ||
|
13:37
carlin joined
|
|||
| jnthn | Note that vt often shows up in NQP code where has $!x will be NQPMu by default, and vc in Rakudo where $!foo will be a Scalar by default and thus we need a distinct Scalar. | 13:42 | |
|
14:01
btyler joined
14:03
carlin joined
|
|||
| brrt | oh, ok | 14:04 | |
| thats ok i guess | |||
| back in segfault land | 14:17 | ||
|
14:24
cognominal joined
|
|||
| brrt | r8, y r u 0 | 14:31 | |
|
14:33
carlin_ joined
|
|||
| timotimo | dat's deep, bru | 14:34 | |
| brrt | (r8 is a register which aint shoudln't be 0) | 14:41 | |
| timotimo | yeah, i thought as much | ||
| brrt | what does the 'owner' field in the MVMObject header represent? | 14:46 | |
| better question | |||
| timotimo | which thread it belongs to? | 14:47 | |
| hm, not actually sure | |||
| brrt | think 7452384 is a reasonable value for it? | 14:52 | |
| is 0 a reasonable value for st? | |||
| i don't suppose it really is, is it? | 14:54 | ||
| timotimo | stables should be set, shouldn't they? | 14:55 | |
| brrt | well, i have something that really should be an object, and has a zero st | 14:56 | |
| brrt is unhappy | 15:00 | ||
|
15:19
vendethiel joined
|
|||
| brrt | the fact that integer division without octoword conversion causes an exception is really useful for debugging | 15:26 | |
| jnthn | brother: owner should probably be 1 always in a single-threaded program. And st should certainly not be NULL. | 15:43 | |
| uh, brrt | |||
|
16:22
brrt joined
17:03
zakharyas joined
17:22
brrt joined
|
|||
| brrt | ... that was.. involved | 17:57 | |
| but it seems that sp_p6obind_o works | |||
| FROGGS_ | brrt++ | 17:59 | |
| brrt | don't take my word for it :-) | ||
| FROGGS_ | I just want to cheer you up :o) | 18:00 | |
| brrt | :-) thanks | 18:06 | |
| i'm also cheered up by the fact that it works | |||
| timotimo | that's cool! :) | 18:07 | |
| dalek | arVM/moar-jit: f3423ac | (Bart Wiegmans)++ | src/ (5 files): Implement spesh p6opaque bind ops |
18:11 | |
|
18:13
btyler joined
|
|||
| brrt | jnthn :-) thanks | 18:16 | |
| i'm off for a few minutes :-) (or an evening, don't know yet) | |||
|
18:17
brrt left
18:40
vendethiel- joined
18:56
jnap joined
19:24
brrt joined
19:26
ingy joined,
brrt joined
|
|||
| brrt | jnthn here? | 19:28 | |
| timotimo | got something to report? š | 19:40 | |
| jnthn back | 19:41 | ||
| brrt: Question? :) | 19:43 | ||
| brrt | oh, ehm....... yes, i had a question, but i'm not sure what | 19:44 | |
| (that only happens always) | |||
| ok, have you (perchance) seen that i've added support for sp_p6obind_* | 19:45 | ||
| i'm wondering what to do tomorrow | |||
| i can continue adding ops fine, but which? | 19:46 | ||
| i also want to start cleaning stuff up / moving it about | 19:47 | ||
| i.e graph creation to jit/graph.c or something, compilation to jit/compile.c | |||
| jnthn | Well, the funky sp_p6oget_ object ones that vivify would complete that "set" | 19:51 | |
| Generally, though, one idea could be to start logging which unavailable ops cause JIT bailout. | 19:52 | ||
| And then hack a script that ranks them. | |||
| brrt | oh, i know that already | ||
| jnthn | And that'll tell you what the top blockers are. | ||
| brrt | i don't have that, no :-) | 19:53 | |
| thats a good idea | |||
| i think wval is a big blocker | |||
| jnthn | Yeah | 19:54 | |
| brrt | ok, script to read jit log, thats a good idea | ||
| jnthn | In the best case, the wval is in gen2 and you can just directly use the memory address of it | ||
| In the less good case you'll need to do the lookup | |||
| In fact, I'd factor that out | 19:55 | ||
| brrt | hmmm, make it a call? | ||
| (c function call) | |||
| jnthn | Works for me | ||
|
19:55
lizmat joined
|
|||
| brrt | yes, i suppose for me too :-) | 19:55 | |
| jnthn | If you do, move the wval impl in interp.c to use that func too | ||
| There's also wval_wide or so | 19:56 | ||
| Which I guess won't JIT any different really | |||
| Just for bytecode space efficiency | |||
| brrt | where should i put the 'wval function' anyway? | ||
| jnthn | sc.c | ||
| brrt | oh, yes | ||
| jnthn | I think that you may want a general thing in the JIT like | 19:57 | |
| try_emit_gen2_ref(...) | |||
| brrt | hmmm | ||
| jnthn | That checks if the object you pass it is in gen2, and if it is JITs a direct static access | ||
| And returns true | |||
| And if not, returns false | |||
| Then wval, and sp_getspeshslot, and const_s, and getcode, and probably some things things can all use it | 19:58 | ||
| brrt | i see what you mean | ||
| jnthn | Of course, the slow path for them is different, but may as well factor out the fast path :) | ||
| Which will occur very often. | |||
| brrt agreed | |||
| jnthn | Of course, the really big thing to attack still - or one of at least - is invocation. | 20:04 | |
| And with it, JITted code retruning to JITted code, and non-JITted returning to JITted, etc. | |||
| If you'd rather spend this week hammering out a bunch more of the basic ops, that's fine by me. | 20:05 | ||
| But I don't think we should put invocation off too much further (as in, could be good to be digging into it next week) | |||
| brrt | i agree as well | 20:07 | |
|
20:09
LLamaRider joined
|
|||
| jnthn | Some of the basic objecty ones could be good also | 20:17 | |
| timotimo | objecty, as in fastcreate? | ||
| jnthn | sp_fastcreate, yeah... As well as the usual create ones, box/unbox... | 20:18 | |
|
20:37
timotimo joined
|
|||
| brrt | hmmm yeah | 20:38 | |
| (ugh, why is string acquiring so involved?) | |||
| timotimo | ;( | 20:39 | |
| brrt is wondering about the balance of 'make it a function' and 'jit it' | 20:40 | ||
| enough for today :-) | 20:41 | ||
| see you tomorow | |||
|
20:45
vendethiel joined
20:48
vendethiel joined
|
|||
| jnthn watches drunk swedes on bicycles driving not-quite-straight up the road in front of the hotel singing "sweet home, sweet chariot"... WAT. :) | 21:02 | ||
| FROGGS_ | *g* | ||
| timotimo | what is the corresponding DWIM, jnthn? :) | 21:05 | |
| jnthn | I...hate to imagine :P | 21:12 | |
| tadzik | drunk swedes? :o | 21:13 | |
| timotimo | they ... they do that? | 21:14 | |
| jnthn | I'm pretty sure the DWIM is *not* the guy with a trumpet he can't really play staggering up the street tooting it... :) | 21:16 | |
| tadzik: While the cost may seem prohibitive, it does indeed happen. :) | |||
|
21:56
cognominal joined
22:06
btyler_ joined
22:15
lizmat joined
22:40
lizmat joined
|
|||
| [Coke] | brrt++ | 23:02 | |
|
23:32
btyler joined
|
|||