00:03
Geth joined
00:19
stmuk joined
01:07
Voldenet joined
01:13
stmuk_ joined
01:49
ilbot3 joined
03:16
eater joined
|
|||
MasterDuke_ | m: my $a = "a" x 2**30; | 03:28 | |
camelia | ( no output ) | ||
MasterDuke_ | m: my $a = "a" x 2**31; | ||
camelia | repeat count > 1073741824 arbitrarily unsupported... in block <unit> at <tmp> line 1 |
||
MasterDuke_ | m: my $a = "a" x 2**30; my $b = $a x 2**30 | 03:29 | |
camelia | Can't repeat string, required number of graphemes 1152921504606846976 > max allowed of 4294967295 in block <unit> at <tmp> line 1 |
||
MasterDuke_ | given that we now have the error about required greater than max, couldn't we remove the arbitrary limit on x? | ||
05:30
cantstanya joined
05:41
brrt joined
|
|||
brrt | good *, #moarvm | 05:42 | |
05:44
nwc10 joined
|
|||
samcv | good * | 05:56 | |
brrt | ohai samcv | 05:59 | |
how are you this morning | |||
samcv | well | 06:00 | |
brrt | wait, it's not at all morning for you | 06:08 | |
did you get to see my blog post? | |||
07:15
brrt joined
|
|||
samcv | i have not yet | 07:49 | |
looking in a sec | |||
i'm working on a SPDX -license identifier parser using grammars | 07:53 | ||
07:53
brrt joined
|
|||
samcv | finally passing more than a few of my tests. finally :) | 07:54 | |
brrt | \o/ | 07:55 | |
hmm, sp_p6obind_o does work if i remove the redundant let: | 07:56 | ||
that's odd | |||
samcv | sp == spesh? | ||
brrt | yes | 07:59 | |
it's an instruction that is inserted by spesh if it can prove the layout of an object | |||
so that we don't have to do dynamic dispatch | |||
samcv | oo | 08:02 | |
brrt | it requires a write barrier, which makes it relatively complex | 08:06 | |
so it's a good test for the JIT | |||
yesterday i had one implementation that consistently blew up in a weird way | |||
now i've changed that in what should be an equivalent way, and now it doesn't blow up anymore | |||
samcv | so there's something that you aren't seeing i guess is the point right | 08:12 | |
reading your post now :-) | 08:13 | ||
.tell brrt very cool post | 08:23 | ||
yoleaux | samcv: I'll pass your message to brrt. | ||
08:30
brrt joined
08:47
Ven joined
09:22
Ven joined
09:26
Ven_ joined
10:19
Ven joined
10:31
brrt joined
10:32
brrt1 joined
|
|||
jnthn | brrt1: Great post! One typo: "That is very inconvenience" | 10:56 | |
brrt1 | oh, thanks, i'll fix it :-) | 10:57 | |
11:01
brrt joined
|
|||
brrt | fixed :-) | 11:10 | |
yoleaux | 08:23Z <samcv> brrt: very cool post | ||
brrt | thx samcv | ||
11:15
Ven_ joined
11:34
Ven joined
11:41
AlexDaniel joined
11:47
brrt joined
12:40
zakharyas joined
|
|||
brrt | oh wow, all sorts of stuff goes wrong with the compilation of sp_p6bind_o | 12:47 | |
that's interesting... | 12:48 | ||
timotimo | i only saw sp_p6oget_o in the blog post, though :P | 12:51 | |
brrt | yeah, i was experimenting with sp_p6obind yesterday afternoon | 12:52 | |
timotimo | mhm | 12:53 | |
brrt | it currently has this redundant let expression. with the let expression, it breaks grandly. without it, it works | ||
(it's redundant because there is just a single ref) | |||
i'm wondering what the 'working' version looks like, though | 12:55 | ||
timotimo | good thing we have a whole bunch of different debug outputs at our disposal :P | 12:56 | |
i was chasing a bug that 100% stumped me the day before yesterday, and i felt that gdb in moarvm still needs much improved :| | |||
brrt | always room for improvement | 13:00 | |
timotimo | right | ||
13:07
zakharyas joined
|
|||
nine | Is there a way to initiate dumping a heap snapshot from within MoarVM so I could use the heap analyzer to find out where an object is referenced from? | 13:20 | |
In a place where we'd otherwise just throw an exception | |||
timotimo | the heap snapshot tool depends on a piece of perl6 code to run :\ | ||
14:29
TimToady joined
14:41
ggoebel joined
|
|||
jnthn | nine: It takes a snapshot each time a GC happens, so just trigger GC | 14:54 | |
(nqp::force_gc or so) | |||
Uh, or if you're inside of MoarVM then just call MVM_gc_enter_from_allocator(tc) or so | 14:55 | ||
MasterDuke_ | jnthn: what do you think about removing the arbitrary limit on string repeats since we now check that the resulting string wouldn't be too long anyway? | 14:57 | |
jnthn | MasterDuke_: Well, we need to make sure that the repetition count in the strand will work out also | 14:58 | |
MasterDuke_ | is that what `STRAND_CHECK(tc, result);` does? | 15:00 | |
jnthn | No, there's a field that holds the repeat count | ||
Which I think is a 32-bit value | 15:01 | ||
MasterDuke_ | ah. `result->body.storage.strands[0].repetitions = count - 1;` this need to be correct? | ||
jnthn | Yes | ||
So we need a bound check | 15:02 | ||
MasterDuke_ | `MVMuint32 repetitions;` in struct MVMStringStrand | ||
jnthn | Right, so is the range check we're doing for soemthing smaller than we can fit in there? | 15:03 | |
We need one, but if it's for a smaller value then there's little need for that. | |||
nine | jnthn: I guess moarvm only writes the heap profile file in an orderly exit? | ||
MasterDuke_ | `repeat count > 1073741824 arbitrarily unsupported...` | ||
jnthn: repetitions and num_graphs are both MVMuint32, so we should be good | 15:05 | ||
jnthn | nine: Yeah, well, actually it forms a string that is then written back in NQP land | ||
m: say 1 +< 32 | 15:06 | ||
camelia | 4294967296 | ||
timotimo | oh, really? i was convinced we were assembling the data in nqp land from an array or something | ||
jnthn | Hmm | ||
timotimo | well, convinced is a bit much | ||
jnthn | Most of the concat is done in C land at least | ||
MasterDuke_ | m: my $a = "a" x 2**31; | 15:07 | |
camelia | repeat count > 1073741824 arbitrarily unsupported... in block <unit> at <tmp> line 1 |
||
MasterDuke_ | m: my $a = "a" x 2**30; my $b = $a x 2**30 | ||
camelia | Can't repeat string, required number of graphemes 1152921504606846976 > max allowed of 4294967295 in block <unit> at <tmp> line 1 |
||
15:07
brrt joined
|
|||
timotimo | jnthn is right | 15:07 | |
jnthn | So it shouldn't be too much code to write a C function that dumps it out | 15:08 | |
MasterDuke_ | jnthn: i'll create a PR to increase that repeat count limit, but feel free to reject | 15:11 | |
nine | I tried just catching the exception, but still don't get a profile written. | 15:15 | |
15:17
domidumont joined
|
|||
brrt | i wonder if it's time to start writing the optimizer | 15:20 | |
jnthn | brrt: For the JIT? :) | ||
brrt | yes | ||
timotimo | yes! always optimize! :D | ||
brrt | hehe | 15:21 | |
jnthn | Maybe would be better to aim for merging it/enabling it by default first? :) | ||
timotimo | yeah, probably | ||
brrt | yeah, probably | ||
hmm | |||
i'm missing the stuff in arglist, it seems | |||
jnthn | I mean, the better quality code should already get us some speedups? | ||
brrt | well, some of the code is decidedly worse | ||
okay, i've discovered what is wrong about the codegen, but not why | 15:23 | ||
(of sp_p6obind_o) | |||
timotimo | how much worse? | ||
do you have some examples? :) | 15:24 | ||
brrt | ehm, sure | 15:26 | |
timotimo | also: good post | 15:27 | |
brrt | ty | 15:29 | |
gist.github.com/bdw/1f5a6c07e8db33...d8c9fa329d | 15:32 | ||
the reason is that the tiling doesn't pick the 'optimal' choice, whihc is a cost issue i think | |||
timotimo | now you're comparing exprjit vs hand-written, i thought we were going to compare template jit vs expr jit | 15:34 | |
brrt | well, the template jit is hand-written code | 15:36 | |
for segments like these (write barrier) | |||
and that is its strength | |||
timotimo | ah | 15:45 | |
brrt | i've found my bug | 15:46 | |
i don't run special-tile code for stuff after the last live range start | 15:47 | ||
timotimo | that'll cause p6obind_o to work better? | ||
brrt | i hope | 15:50 | |
yes | |||
[Coke] | so, not knowing where this project is, status wise - how close are we to a new jit? | 15:52 | |
brrt | hmm, i want to expand with a very complete answer | 15:54 | |
the short answer is 'pretty close, but i don't know a good timeframe, since i'm time-limited' | 15:55 | ||
the complete answer includes: note that the new jit is actually embedded in the old one | |||
and relies - for so long as that is reasonable - on the old jit to handle some particularly nasty stuff (e.g. exceptions) | 15:56 | ||
that can be done by the expr jit eventually as well, but i'm in no hurry | |||
[Coke] | OK. are you at a point where having more hands would be helpful? | ||
brrt | almost | 15:59 | |
:-) | |||
i'm nailing down the final pieces of mechanism | |||
Geth | MoarVM/even-moar-jit: e1529f462c | (Bart Wiegmans)++ | src/jit/linear_scan.c Make sure we run 'special tile' code after last live range If we don't, we can miss ARGLIST argument setup and other essentials. This would break a write-barrier case in sp_p6obind_o. |
||
[Coke] | sweet. well, let us know. thanks for keeping at it. | 16:01 | |
16:33
Ven joined,
nebuchad` joined
|
|||
Geth | MoarVM/even-moar-jit: 7a631fb7f2 | (Bart Wiegmans)++ | 2 files Take requirement handling out of loop So that we don't have to duplicate it, just the call. Also, enable sp_p6obind_o, and watch it not burn. |
16:36 | |
MoarVM/even-moar-jit: 2593e26ad3 | (Bart Wiegmans)++ | src/jit/core.expr Remove 'let' in sp_p6obind_o Not necessary to have it, so let's get rid of it, it'll make the generated code simpler. |
|||
16:42
ilmari joined
16:59
zakharyas joined
18:42
ggoebel joined
18:48
zakharyas joined
19:49
ggoebel joined
19:57
Ven joined
20:18
Zoffix joined
20:20
Ven_ joined
20:37
geekosaur joined
21:15
geekosaur joined
|