timotimo | (well, the first 2 gc runs actually left 17% in there and the third one left 10% in there, but that was probably due to stuff being compiled and stuff) | 00:10 | |
00:12
ventica joined
|
|||
japhb | I think you're basically confirming that our allocation and lifetime patterns match the generational hypothesis. :-) | 00:50 | |
timotimo | yup. | 01:02 | |
dalek | arVM: f4536ef | TimToady++ | src/ (3 files): instrument dynvar lookup for logging |
01:13 | |
TimToady | initial analysis of dynvars: gist.github.com/anonymous/ea75f8c3c12022fd9c39 | 01:16 | |
first section is with no caching, second section is jnthn's current code | |||
a large part of the problem currently is collisions with other names, since we populate the cache too much | 01:17 | ||
so for instance, while $*W has an average frame depth of 44 without the cache, the cache only cuts that down to 29 on average | 01:18 | ||
so yeah, I think we can do much better | |||
dalek | arVM: 4151c4f | TimToady++ | tools/dynvarcost: add dynvarcost script |
01:20 | |
japhb | * Only Sept 16-18 have scheduled activities, 15th and 19th are dedicated for travel | ||
* Only non-stop flights are on Aer Lingus, SFO āļø DUB | |||
* Not all days are available | |||
* Best I found was leave SFO Sunday the 14th, return Friday the 19th, $1412 round trip | |||
D'oh | |||
Damn paste buffer | 01:21 | ||
TimToady | irssi can stop that... | ||
timotimo | as can weechat | 01:22 | |
TimToady | dinner & | ||
timotimo | japhb: i'm yearning for some feature that'll show me what checkouts have commits from what date, or at least sort by commit date or something | 01:23 | |
(for perl6-bench) | |||
japhb | History view already sorts by commit date, but I'm guessing you mean for compare view? | 01:24 | |
timotimo | more like for "list" view | 01:25 | |
right now i'm unsure what commit to include between the current nqp head and 2014.07 | |||
japhb | Isn't there a `bench list-tags` with dates? I thought I did that. | 01:26 | |
timotimo | oh? | ||
yikes! | |||
this command is *very* unhappy :) | |||
japhb | Oh dear. I'll take a look on the bus. | 01:27 | |
timotimo | fatal: ambiguous argument 'MadMongers^{commit}': unknown revision or path not in the working tree. | ||
Use '--' to separate paths from revisions, like this: | |||
'git <command> [<revision>...] -- [<file>...]' | |||
1970-01-01 MadMongers | |||
japhb | japhb.move-to($bus-stop); | ||
timotimo | it outputs this for every single commit of everything forever | ||
i guess i want list-checkouts to also show the date of the revision | 01:28 | ||
japhb | timotimo: What version of git do you have? | 01:35 | |
timotimo | git version 1.9.3 | 01:36 | |
this is what i ended up doing btw: for path in *; cd $path; git lg | head -1; cd ..; end | |||
gist.github.com/timo/b733145ba7e73ef0d2b8 | |||
01:38
FROGGS__ joined
|
|||
timotimo | t.h8.lv/p6bench/2014-08-06-with_new_match.html - jnthn, this compares a revision before and after the new implementation for nqp Match object creation and the latest release | 01:38 | |
only the json benchmarks are very interesting, i'd thinsk | |||
japhb | timotimo: What is 'git lg'? I'm assuming it's an alias, but defined as what? | 01:40 | |
timotimo | `git lg' is aliased to `log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %Cblue<%an>%Creset' --abbrev-commit --date=relative' | ||
i wish i remembered where i picked up this beauty | 01:41 | ||
japhb | Oh now that is nice. | 01:45 | |
timotimo | aye | ||
japhb | And here's a very simple bash helper I like: gpr () { cur=`git rev-parse HEAD`; git pull; git log -p --reverse $cur...; } | ||
gpr here standing for 'Git Pull and Review' | |||
01:47
ilbot3 joined
|
|||
timotimo | in case you don't get mails delivered to your bus, i opened a few issues on perl6-bench to track my feature requests | 01:47 | |
o/ | |||
02:03
ventica joined
|
|||
japhb | timotimo: Hmm, my git is a 2.0; perhaps ^{commit} only came in the 2.0 series? | 02:03 | |
If so, I'd like to find a backwards-compatible variant. | 02:04 | ||
03:11
cognome joined
03:35
egrep joined
|
|||
egrep wonders if this is an error given by moarvm... sprunge.us/OOdK | 03:38 | ||
I actually have a lot more output, though, if it helps: gist.github.com/egrepnix/ecf20c44365e26afbf2e and gist.github.com/egrepnix/a90a9a29040f2c8bd5a9 | 03:54 | ||
05:57
ventica joined
|
|||
sergot | o/ | 06:23 | |
06:25
brrt joined
06:40
ventica joined
|
|||
brrt | \o | 07:22 | |
ok, i've inspectedthe use of MMV_args_get_pos_* | 07:27 | ||
and there are two things people want from that function | |||
functions | 07:28 | ||
a): the value b): the existence | |||
mostly the value, though | 07:29 | ||
07:32
btyler joined
07:43
cognome joined
|
|||
dalek | arVM: 37d4ac6 | TimToady++ | src/core/frame.c: use better dynvar cache |
07:53 | |
TimToady | that saves nearly another second | ||
brrt | \o/ | 07:54 | |
TimToady | latest dynvar stats at: gist.github.com/anonymous/8db7bdfb5f3ac4c79bd3 | 07:59 | |
07:59
btyler joined
|
|||
TimToady | gets the average search down from 11 frames to 5 frames (no cache was 17 frames average) | 08:00 | |
nwc10 | brrt: ASAN gets SEGV on setting build | 08:03 | |
08:03
synopsebot joined
|
|||
nwc10 | #0 0x7f6d1a6bf2da in MVM_coerce_istrue src/core/coerce.c:43 | 08:03 | |
brrt | ASAN knows why? | ||
hmmm | |||
nwc10 | ==20917==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000050 (pc 0x7f6d1a6bf2db sp 0x7fffe83f9650 bp 0x7fffe83f96b0 T0) | ||
that would look like a NULL pointer deference | |||
brrt | very much | ||
question | |||
TimToady | could be my fault | 08:04 | |
brrt | why's that a NULL pointer | ||
unlikely TimToady, unless you work on moar-jit :-) | |||
nwc10 | TimToady: I'm not sure because ... what he said | ||
dalek | arVM: 4ed81a1 | TimToady++ | src/core/frame.c: make sure 'from' isn't null |
08:05 | |
TimToady | okay, well, just fixed my potential problem anyway | ||
08:13
daxim_ joined
|
|||
dalek | arVM: a86dd6a | TimToady++ | src/core/frame.c: be slightly more desperate on high icost |
08:22 | |
TimToady | zzz & | 08:30 | |
jnthn | TimToady++ | 08:31 | |
brrt | sleep well TimToady | 08:37 | |
++ indeed | |||
bbiab | 08:38 | ||
dalek | arVM: 24fab9a | jnthn++ | src/core/frame.c: Tabs -> spaces, for consistency. |
08:50 | |
arVM: 3ddf3ce | jnthn++ | src/core/frame.c: Re-ordering to fix MSVC build. |
|||
08:52
ggoebel1111110 joined
08:53
btyler joined
08:54
sergot joined,
ashleydev joined
08:55
lue joined
|
|||
jnthn gets his first Rakudo build in under 65s, and first NQP build in under 35s, with the TimToady++ patch | 09:00 | ||
09:09
brrt joined
|
|||
brrt | back | 09:10 | |
jnthn | morrning, brrt | 09:12 | |
brrt | morning jnthn :-) | ||
jnthn | So, what's the latest explosion status? :) | ||
brrt | still exploding | 09:13 | |
depends on decont, findmeth, box_s, elemt, getattr_i, , bind_pos_i | |||
still no idea why :-( | |||
i'm also at some point of frustration with regards to the args refactor thingy | |||
jnthn | args refactor? | 09:14 | |
brrt | i.e. returning structs as MVM_args_get_(pos|named)_(int|str|num|obj) is not really well specified, and rather depends on the size of the struct, the compiler, and the phase of the moon | ||
sometimes they're returned using a passed-pointer to pre-allocated stack space | 09:15 | ||
sometimes they're returned in two registers | |||
ABI specs don't really tell which | |||
so, i really need only two things: the value of the arg, and the existence | |||
jnthn | ah | 09:16 | |
Might be better switching to two out parameters... | |||
brrt | hmm | ||
that'd be ok, i guess | 09:17 | ||
jnthn | Seems the JIT gets a decent bit further into CORE.setting now... | 09:19 | |
jnthn is waiting for it to explode | |||
brrt | really? | ||
:-o | |||
brrt doesn't believe it | |||
jnthn | uh. It failed to explode here. | ||
Like, it completed a CORE.setting build | 09:20 | ||
brrt | ok, what | ||
do you have findmeth commented | |||
jnthn | oh, I'm just at HEAD on moar-jit | 09:21 | |
I thought we uncommented it after the last fix? | |||
brrt | no, haven't | 09:22 | |
sorry about that | |||
jnthn | findmeth and findmeth_s don't seem commented in jraph.c | ||
*graph | |||
And I've no local diffs | |||
Oh, but sp_findmeth is commented still | 09:23 | ||
nwc10 | Stage parse : 189.589 | ||
that's with ASAN | |||
I've not seen it that low before | |||
jnthn | Setting limbo! | ||
masak .oO( how lo' can you go ) | 09:24 | ||
jnthn | Exactly :P | ||
brrt | :-) | 09:26 | |
bbiab | |||
jnthn | brrt: Evening uncommetning sp_findmeth in graph.c doesn't get me any errors | ||
nwc10 | that may well mean now that MoarVM built with debug + ASAN is as fast as optimised parrot | ||
jnthn | Now building with moar-jit and a 32kb nursery to try and hit a GC issue | 09:32 | |
Failed so far :( | |||
It's in stage mast and failed to fail. Hmm. | 09:42 | ||
Yup, completed. | 09:45 | ||
09:58
brrt joined
|
|||
brrt | :-o jnthn your computer must be broken | 09:59 | |
or, you don't have JIT enabled? | |||
jnthn | I'm fairly sure I did... | 10:00 | |
I checked MVM_JIT_DISABLE was cleared in my env too | |||
brrt | i'm building from clean scratch now | ||
ok | |||
MVM_JIT_LOG gives you a real log file even? | |||
jnthn | I didn't try that | 10:01 | |
And I'm working back in another branch now... | |||
brrt | well, i'm retrying anyway | ||
:-) | |||
10:01
FROGGS[mobile] joined
|
|||
brrt | still blows up for me | 10:03 | |
jnthn | You agree HEAD has findmeth and findmeth_s uncommented, though? | 10:04 | |
So it's just sp_findmeth that is commented? | |||
brrt | i agree | 10:05 | |
jnthn | OK | ||
And it's sp_findmeth that breaks things nowadays? | |||
brrt | no | ||
it's still breaks with only findmeth and findmeth_s for me :-( | |||
but, maybe it breaks differently? | 10:10 | ||
nwc10 | m: say 5.7776e+01/5.8165e+01; say 5.7776e+01/6.597e+01 | ||
camelia | rakudo-moar 3f3abe: OUTPUTĀ«0.993312129287372ā¤0.875792026678793ā¤Ā» | ||
nwc10 | so a bit faster still since the last time that I measured it, and quite a lot faster than the first time I remembered to measure it | ||
(and also ASAN is happy) | 10:11 | ||
brrt | exact same crash as yesterday | 10:12 | |
in the decont of some value | |||
$*LEFTSIGIL, how is that looked up? | 10:15 | ||
jnthn | getlexdyn | ||
or getdynlex | |||
can never remember which way around it goes :) | |||
brrt | hmm | 10:16 | |
getdynlex isn't quite implemented | |||
also | |||
MVM_SPESH_DISABLE_INLINE=1 .... fixes my problems | |||
fuuuuuu | |||
jnthn | That may be because without inlining you don't JIT certain frames? | 10:19 | |
Also it's MVM_SPESH_INLINE_DISABLE ? | 10:20 | ||
10:20
jimmyz_ joined
|
|||
jnthn | Also it's MVM_SPESH_OSR_DISABLE ? | 10:20 | |
opos | |||
d/Also it's/Did you try/ | |||
jimmyz_ | Stage parse : 33.332, before ~34.3s, Stage mast : 10.960, before ~12.3s | ||
since yesterday | 10:21 | ||
brrt | OSR_DISABLE makes no difference | ||
very nice | |||
and yeah, i did INLINE_DISABLE | |||
possible, but weird, and unexpected; inlining would make frames bigger, thus less likely to be compiled | 10:22 | ||
jnthn | True | 10:25 | |
brrt | it's very likely one of those Very Big Frames | 11:13 | |
but, i've some good news as well i think | 11:35 | ||
there are only five of these | 11:36 | ||
so what i can do is pinpoint-disable them by inserting an unjittable op (callercode or something weird like that) | |||
and... see what that does | |||
jnthn | Sounds good | 11:38 | |
brrt | ok, disabling MARKER in nqp/src/HLL/Grammar.nqp has sufficient effect | 11:46 | |
i'm wondering if my isnull check is correct | |||
jnthn | That wouldn't easily explain junk... | 11:52 | |
brrt | no | ||
and... disabling _ws /also/ makes it work | 11:54 | ||
wow, disabling any of them makes it work | 11:59 | ||
:-( | |||
oh, my bad | 12:12 | ||
12:18
cognome joined
|
|||
jnthn | grr, I musta done something wrong when I built this morning | 12:36 | |
jnthn gets NQP fine but a JIT setting build crash now too | |||
12:43
jnap joined
|
|||
jnthn | wtf...if I turn on MVM_JIT_LOG it fails to crash?! | 12:47 | |
13:06
brrt joined
|
|||
brrt | what | 13:07 | |
jnthn | yes, my thought exactly | 13:09 | |
brrt | :-( | ||
jnthn | If I try to dereference the thing in getdynlex it does crash there | 13:10 | |
is bindlexdyn JITted? | 13:11 | ||
Seems not | 13:14 | ||
brrt: Update: | 13:21 | ||
If it is $*LEFTSIGIL then we can look at what binds it that we could JIT | 13:22 | ||
brrt | bindlexdyn is not JITted | ||
jnthn | And there's only one place that accesses it directly as a lexical | ||
Right, I found that | |||
brrt | and that is? | ||
jnthn | method EXPR in src/Perl6/Grammar.pm | ||
We never JIT that | |||
However, it gets inlined. | 13:23 | ||
brrt | yes | ||
in modifier_expr | |||
jnthn | And arglist | ||
brrt | which is the /single/ frame that i can conclusively show to break | ||
arglist i cannot | 13:24 | ||
13:26
woolfy left
|
|||
brrt | gist.github.com/bdw/3bd68be793514c2f7ddb is the breaking frame | 13:30 | |
jnthn | Concur it seems to be modifier_expr | ||
Oh...darn. | |||
How do I check if we're in JITted code in an MVMFrame? | 13:31 | ||
brrt | if you disable it in src/Perl6/Grammar.nqp:1578 by adding an effectless line to nqp::callercode(), and it unbreaks | ||
:-) | |||
jnthn | Or, were before we left it? | ||
oh, I guess spesh_cand and jitcode are set... | |||
brrt | basically, if we've been invoked from a JITted frame, somewhere along the caller chaing, spesh_cand and jitcode should be said | ||
i've not had great effect with that, but it's possible | 13:32 | ||
s/said/set/ | |||
if we've returned a value from the jitcode, you're out of luck | 13:33 | ||
jnthn | ->return_address is not valid when we're called from jitted code? | ||
brrt | it should be valid, yes | 13:35 | |
but it should always refer to the MAGIC_BYTECODE variable | |||
jnthn | Certainly can reproduce modifer_expr issue | 13:38 | |
brrt | \o/ | 13:39 | |
that's something | |||
the only good bugs are reproducable and isolated :-) | 13:40 | ||
brrt bbiab :-) | |||
jnthn | The code I think is guilty is in MVM_frame_find_contextual_by_name | 13:43 | |
Of note, the inlines searching bit | |||
dalek | arVM/moar-jit: dded577 | jnthn++ | src/jit/emit_win32_x64.c: Updated win32 JIT emitter. |
14:19 | |
arVM/moar-jit: 02e2e41 | jnthn++ | src/core/frame.c: NULL the return_address in new frames. Otherwise, we might invalidly end up considering us inside of some kind of inline because we see a return address from a prior use of the frame. |
|||
arVM/moar-jit: 5595f46 | jnthn++ | src/core/frame.c: Disable dynlex-in-inline caching for now. See comment in code for why; exposes something that needs changes for JIT. (The same issue exists for deopt_all, and the same solution can cover both of these: building JITted extent lists of machine code addresses for the inlines. Very similar to what's needed for the exception handler regions too.) |
|||
jnthn | brrt: No SEGV, no cry... | 14:20 | |
timotimo | how far do we get now? sanity tests and spectests? | ||
jnthn | Sanity tests pass | ||
jnthn kicks off a spectest run | 14:21 | ||
timotimo | nice! :) | ||
jnthn | Into S03 with no fails so far | ||
timotimo | without latest master merged in, we ought to expect a segfault in the threads.t thingie | 14:23 | |
jnthn | spectest looks pretty good | 14:27 | |
Bunch of thread fails that are likely due to the thing you jsut mentioned | |||
timotimo | that sounds very good | ||
jnthn | aye | 14:29 | |
timotimo | i'm glad | ||
does that mean we have all the ops uncommented now? | |||
jnthn | I didn't uncomment sp_findmeth | 14:30 | |
But it likely can be. | |||
14:47
brrt joined
14:51
ventica joined
14:53
ventica2 joined
|
|||
brrt | :-o jnthn++ very much | 14:55 | |
brrt is now testing on his own system | |||
omg it works! | 14:58 | ||
ok, so the main thing to do, it seems, is to compute the 'machine code borders' of the inline? | 14:59 | ||
and i suppose the deopt_point_inline annotation determines where that border is? | 15:00 | ||
jnthn | Yes | ||
It's basically the same problem as for exception hander regions | |||
Those too being marked out by annotations | 15:01 | ||
brrt | very well | ||
i'll argue that exception handlers are a wee bit more complex | 15:02 | ||
because you also have a 'exception handler goto point' | |||
and.. i suppose that's just the point you jump to after you've 'caught' a handler between two borders? | |||
jnthn | Yes, you're right | 15:03 | |
brrt | ok.. so how is a single handler constructed? | ||
sp_findmeth basically passes with colours | |||
timotimo | our bytecode has colors? | 15:04 | |
jnthn | Well, handlers are kinda interesting | ||
brrt | do tell :-) | 15:05 | |
jnthn | The key is .action | ||
Some handlers simply one you to goto a certain position. Those are the easy ones. | |||
The other case is that they want to invoke a block | |||
And the block then does the handling | 15:06 | ||
The block runs on the stack top before any kind of unwinding. | |||
brrt | ok | ||
jnthn | But that's basically invokey behavior | ||
Just need to be aware that there'll be an unwind afterwards unless it does a resume. | 15:07 | ||
timotimo | i wonder what kind of introspecty things we could offer to users of MVM-based languages | ||
like, can we offer a function that'd make mvm dump the bytecode of a given callable, for exampae? | |||
jnthn | So I think you don't need to do too much special for the invokey handlers. | 15:08 | |
timotimo | from within a repl session, for example | ||
jnthn | Though the unwind after them is more interesting | ||
So in that case goto is still interesting | |||
But "afterwards" | |||
brrt | hmm | 15:10 | |
ok, i'll read though the source and determine a course of action | 15:14 | ||
much jnthn++ by the way for resolving the bug :-) | |||
jnthn | np :) | 15:17 | |
BTW, given --enable-jit is needed to actually enable a build with JIT, and that things do basically work now, we may want to consider the merge to master. | |||
timotimo | i would like that | 15:18 | |
it would make running stuff with the perl6-bench tools easier | |||
jnthn | It's nice to have it done ahead of the soft pencils down date, I think. :) | ||
brrt | yes, i agree | ||
timotimo | aye, they recommend to do things like documentation between soft and hard pencils down | 15:19 | |
brrt | we have something, if not everything, now | ||
bugfixes are allowed, too :-) | |||
timotimo | right | ||
you can even do more stuff, but it won't be considered for the gsoc, right? | |||
brrt | hmmm.... that depends on who judges, i think | 15:20 | |
and i have no idea of that | |||
who judges the code or on what criteria | 15:21 | ||
i'm off preparing dinner | 15:22 | ||
(i seem to live two hours earlier than the rest of you, even though we're in the same time zone. weird) | |||
timotimo | heh. :) | 15:23 | |
15:23
brrt left
|
|||
nwc10 | JIT still gets to the end of spectest with ASAN | 15:26 | |
jnthn | nwc10: You are configuring the build with --enable-jit ? | ||
nwc10 | t/spec/S32-str/encode.rakudo.moar still fails, but that's a #perl6 | ||
jnthn | The encode.rakudo.moar is a Moar regression actually :( | ||
nwc10 | yes. More importantly, I'm then using that moarvm, and not a JIT-free one :-) | ||
jnthn | OK :) | 15:27 | |
nwc10 | This is MoarVM version 2014.07-301-g5595f46 | ||
timotimo | is that the "iteration past end of grapheme iterator" explosion? | ||
jnthn | No | ||
It's an icky fallout of the lazy deserialization stuff | |||
timotimo | OK | 15:28 | |
jnthn | It has a subtle reliance on deserializing everything in the order it showed up in the SC. | ||
Which we no longer do. | |||
timotimo | oh, that's not good | 15:29 | |
who knew i never knew how to mvm :) | 16:18 | ||
i have to root root! | |||
tbh, i never grokked how the parameters to MVM_ASSIGN_REF work ... | 16:19 | ||
how come i see no MVMROOT usages in other initialize methods? | 16:25 | ||
jnthn | They don't allocate? | ||
Except KnowHOWREPR maybe | |||
timotimo | knowhowrepr pushes the root temporarily | ||
so i guess that's all right | |||
jnthn | Yeah | ||
MVMROOT is sugar for that | |||
It came later | |||
timotimo | righto | 16:26 | |
jnthn: do we already do something in spesh for the action methods when parsing stuff? | 16:27 | ||
since the action class is unlikely to be switched out in the middle? | |||
dalek | arVM: 7cb553a | (Timo Paulssen)++ | src/6model/reprs/MVMCompUnit.c: need to root root and assign ref in MVMCompUnit::initialize |
16:31 | |
jnthn | timotimo: No, 'cus the action methods aren't, sadly, called directly from the rules | 16:38 | |
16:39
FROGGS[mobile] joined
16:40
itz joined
|
|||
dalek | arVM: 5fc5a59 | jnthn++ | / (8 files): Stub async process control ops. |
17:10 | |
arVM/moar-jit: 0e369b3 | (Bart Wiegmans)++ | src/jit/emit_ (3 files): Simplified some ops implementations |
17:36 | ||
arVM/moar-jit: 99f3c37 | (Bart Wiegmans)++ | src/jit/graph.c: Re-enable sp_findmeth jnthn++'s change fixed the problems for sp_findmeth as well as the regular findmeth. |
|||
17:36
brrt joined
|
|||
brrt | \o | 17:36 | |
brrt is excited about renewing progress | |||
for those who are interested, i'm building moar without gcc optimizations - this moves the time for building core.setting up to 50 s - but JIT with sp_findmeth reduces that to 46 s | 17:38 | ||
can we implement getdynlex, or will that pose a problem? | 17:41 | ||
oh, i think it will | 17:42 | ||
for the same reasons as before | 17:46 | ||
:-) | |||
jnthn | I think the inliner refuses to directly inline getdynlex | 17:49 | |
The bug isn't about getdynlex itself, it occurs when the lexicals are declared in frames that get inlined. | |||
So I don't think it'll be a problem, off hand. | |||
brrt: Any objections to me having a crack at extops JIT this evening? | 17:50 | ||
brrt | no, not at all | ||
:-) | |||
jnthn | OK. Fine if I merge latest master in too? | ||
brrt | sure | ||
i'm not sure how you would want to do it, but i would have started with adding a special node | 17:51 | ||
that node would contain the function pointer, the ins info (invokish etc), and the argument array | |||
the argument array.. i was hoping we could let the spesh codegen do most of that - i.e. i see little reason to replicate it in jit/graph.c or something lik ethat | 17:52 | ||
and what i was hoping even more is to simply use the encoded arguments of the spesh cand's bytecode, i.e. take a pointer into that array | 17:53 | ||
then, assuming the speshed bytecode won't move afterwards, you can embed the pointer directly | |||
otherwise, you'd need to manage an array of encoded arguments in the JitCode and JitGraph structures, and i hardly feel for that | 17:54 | ||
anyway, it's up to you, i'll probably be busy dealing with handlers and afterwards with dynlex | 17:55 | ||
one more thing that you've probably already seen but is relevant anyway: if you're storing pointers directly, beware that - because of dynasm function signatures - they are passed in two pieces (upper and lower 32 bits), so you'll have to use the special mov64 opcode and cast the pointer to an integer type of sorts | 17:58 | ||
nwc10 | brrt: JIT build fail | 17:59 | |
Too many positional parameters passed; got 2 but expected 1 at gen/moar/stage1/NQPHLL.nqp:2072 (gen/moar/stage1/NQPHLL.moarvm::107) | |||
brrt | what | 18:00 | |
oh | |||
hmm | |||
..... fuuuu | 18:01 | ||
that's with sp_findmeth only, right? | 18:02 | ||
nwc10 | yes, that most recent commit | ||
clean build | |||
brrt | bloody... | 18:03 | |
jnthn | nwc10: And the commit immediately before it was clean? | 18:06 | |
nwc10 | All tests successful. | ||
yes | |||
jnthn | If it's calling the wrong method, it could be that it's a mistake in validating whether we should use the cached thing | 18:08 | |
dinner; bbiab | |||
brrt | yeah... or maybe the invokish test isn't very good | 18:10 | |
and.. that's not it, either | 18:11 | ||
this is by the way, the undebuggable bug from earlier :-( | 18:14 | ||
jnthn back | 18:36 | ||
nwc10 | JIT build good all the way to spectest at 0e369b3a31c74381678e047cbfe73db0e520c044 | ||
fail on HEAD is for | 18:38 | ||
/home/nicholas/Sandpit/moar-g-jit/bin/moar | |||
--libpath=src/vm/moar/stage0 src/vm/moar/stage0/nqp.moarvm --bootstrap --module-path=gen/moar/stage1 --setting-path=gen/moar/stage1 --setting=NQPCOR | |||
E --no-regex-lib --target=mbc --output=gen/moar/stage1/QAST.moarvm g | |||
en/moar/stage1/QAST.nqp | |||
valgrind finds nothing wrong | |||
I can't see how to help further. And all I can really say is that it's not undefined behaviour. Something in the code is wrong. | 18:39 | ||
brrt | basically, there's an error that creeps in during the compilation of NQPHLL.nqp | 18:43 | |
that error then breaks the compilation of QAST.nqp | |||
why should this be so? well, no idea, really | |||
nwc10 | it's a stage 1 error | 18:44 | |
brrt | it also happens in stage2 :-) | ||
nwc10 | sure, but a clean build doesn't get that far | ||
brrt | you can work arround it by disabling jit in the compilation of NQPHLL | ||
nwc10 | is it possible to diff the outputs of stage 0 for JIT and not-JIT? | ||
I infer that the divergent behaviour is happening at runtime of stage 0 | 18:45 | ||
while stage 0 is compiling stage 1 | |||
brrt | yeah, i think that's possible | ||
although | |||
how to interpret the difference? | |||
nwc10 | stop asking sensible questions :-) | 18:46 | |
I think, if you can identify which stage1 output file(s) have differences | |||
you can then start to figure out which bit of code running at stage0 is differing | 18:47 | ||
brrt | that... seems like sensible even if not entirely feasible | 18:48 | |
jnthn | I can reproduce the issue on Windows too, fwiw | ||
Looking at the backtrace, it happens while loading NQPHLL | 18:50 | ||
brrt | :-( | 18:51 | |
brrt bbiab | |||
dalek | arVM/moar-jit: a9906fa | jnthn++ | src/mast/compiler.c: Don't hunt for outer frame index if it's cached. This was, curiously enough, one of the biggest time sinks in the entire assembly of large things like CORE.setting. 3bad756 | jnthn++ | src/core/bytecodedump.c: Unbust bytecode dump after lazy frame loading opt. |
||
18:52
dalek joined
|
|||
jnthn | That brings in latest stuff from master | 18:53 | |
The call to new_type in: | 18:58 | ||
my $knowhow := nqp::knowhow().new_type(:repr("P6bigint")); | |||
Is being compiled as: | |||
00103 prepargs Callsite_5 | |||
00104 arg_o 0, loc_15_obj | |||
00105 arg_s 1, loc_16_str | |||
00106 invoke_o loc_15_obj, loc_17_obj | |||
Which means it really does have a positional arg there instead of a named one in the compiled output | 18:59 | ||
FROGGS | too bad, the commit is 3bad | 19:06 | |
jnthn | I think I can imagine what's going wrong here | 19:15 | |
When we attach a named arg to something, it mixes in | |||
Mixing in does deopt_all | |||
But we don't know how to deopt JITted frames yet | |||
cannot deopt from jitted frame named | 19:16 | ||
cannot deopt from jitted frame colonpair | |||
timotimo | good catch | 19:17 | |
jnthn | (if I put in a line to note the times we fail) | ||
So yeah, it's a known todo. | |||
timotimo | that's definitely good to know | 19:21 | |
19:26
brrt joined
|
|||
timotimo | there's certainly a lot of mysteries around the whole jit topic | 19:28 | |
brrt | jnthn++ for brilliance :-o | ||
am i correct in assuming that if and when we have the extent-list-for-JIT-inlines-and-handlers (ahum) | 19:30 | ||
then we can fix this? | |||
timotimo | the elfiah? | 19:32 | |
jnthn | It's related, yeah... | ||
brrt | elfiah? | 19:42 | |
timotimo | the Extent List For Inlines and Handlers | ||
vendethiel | .oO( the elvish trees have spoken ) |
||
brrt likes that | 19:43 | ||
ugh, complexity is greater than assumed | 19:56 | ||
although the deopt stuff seems like it should be doable if it can be started correctly, like in deopt_one | 20:05 | ||
20:10
odc` joined
20:16
klaas-janstol joined
20:29
jnap1 joined
21:09
ventica joined
21:34
lizmat joined
21:44
woolfy joined
21:55
woolfy joined
22:25
klaas-janstol joined
|
|||
dalek | arVM/moar-jit: aafb3aa | jnthn++ | src/ (6 files): Fix deopt_all under JIT compilation. This records the JIT labels that map to each deopt all index, so we can turn a jit_entry_label into a deopt index at the time we need to deopt all. Fixes the crash in the NQP build under the JIT due to the named parameter QAST construction mixing in and triggering deopt_all. This is Fisher Price My First JIT Patch (TM); review suggested. |
22:32 | |
jnthn suspects brrt++ will be happy to see this in the morning. :) | 22:33 | ||
Hope it works on Not My Machine too... :) | |||
timotimo | i can try it :) | 22:34 | |
japhb imagines a Happy Fun Ball style spoof commercial for My First JIT Patch | |||
timotimo | was able to build nqp from scratch | 22:36 | |
(well, from scratch is wrong of course. i didn't create the universe first) | |||
jnthn | timotimo: yay | 22:37 | |
timotimo | parse is at 34 seconds right now, but my computer is quite busy with other stuff | ||
jnthn | That was quite a fiddly one to write. But all deopt-related patches have been... | ||
timotimo | even sanity tests work fine! | 22:38 | |
jnthn | Rakudo ones too :) | 22:43 | |
timotimo | the rakudo tests, yes | ||
jnthn | oh, yeah, for some unknown reason I thought you meant the NQP ones | 22:44 | |
timotimo | the beginning of the spectest looks good | ||
oh well | 22:46 | ||
===( 20312;143 8/10 1/9 1/6 )=====================================*** Error in `/home/timo/perl6/rakudo/../install/bin/moar': munmap_chunk(): invalid pointer: 0x00007f0336559ebe *** | |||
oh, hold on, do we have master merged in now? | 22:47 | ||
jnthn | What test? | ||
Yes | |||
timotimo | t/spec/S17-promise/start.t it seems | ||
jnthn | But there's still at lesat one race I know of... | ||
timotimo | no, i think times.t is it | ||
Unhandled exception: Contextual name cannot be null and Unhandled exception: Cannot assign to a readonly variable or a value | 22:48 | ||
this is races caused by the jit or races caused by our recent optimizations to making stuff lazily vivified? | 22:51 | ||
jnthn | The latter, I think | 22:52 | |
timotimo | OK, so if i want to develop something on moar with multithreaded stuff i ought to go back to 2014.07 | ||
well, that's fine | |||
jnthn | Was pondering patching it tonight, but ended up doing the jit deopt patch instead | 22:54 | |
timotimo | that'll allow brrt to continue tomorrow morning | ||
i think the decision was good. | |||
jnthn | aye | 22:55 | |
I know deopt can be horrible, and didn't really want him to lose another day to it | |||
timotimo | yeah, far too many bug hunts of his have ended somewhere that was way out of his range | 22:56 | |
jnthn | Well, a JIT can only be so much of an isolated thing. | 23:02 | |
timotimo | definitely true | ||
23:06
klaas-janstol joined
23:07
ventica joined
|
|||
dalek | arVM/jit-extops: 16bde9a | jnthn++ | src/jit/graph.c: An initial sketch of JITting extops calls. Doesn't yet fully work, most probably because it JITs some that are invokey without handling that, or that mess with interpreter state (and so need a mechanism to flag them "don't JIT me"). |
23:32 | |
jnthn | That's all I've got energy for today... Mebbe I'll be able to finish that up tomorrow. :) | 23:33 | |
timotimo | wouldn't "don't jit me" just be another flag on the op? | 23:34 | |
jnthn | yeah, it's not that it's hard, it's just that I'm tired :) | ||
I already added ext op flags | 23:35 | ||
timotimo | right | ||
japhb | jnthn: When you're less tired: I added the --min-time option for you to tune the noise thresholding | ||
timotimo | good night, then :) | ||
jnthn | japhb: Ah, cool. I'll have to do another benchmark run here soon. Hopefully with the JIT on to see how it handles things :) | ||
23:35
oetiker joined
|
|||
japhb | :-) | 23:35 | |
jnthn | Really need exception handlers to work for that, though, since loops emit them. | 23:36 | |
brrt++ was looking at that today though, so maybe we get them in the not too distant future :) | |||
japhb: Weren't you working on some concurrency stuff that spawned various scripts at one point, ooc? | |||
Or spawned various other things, anyway.... | 23:37 | ||
Anyway, if so, I started working on a Proc::Async today, which should allow rather more efficient handling of such things (e.g. without blocking up a thread per process you spawn) :) | |||
Anyways, yes, good night :) o/ | 23:38 | ||
japhb | jnthn: Oh yay! Yes, I did have a couple variations on a script that would spawn a lot of children, and pretty much eat up the thread pool with that. Will your async spawning include being able to capture (or otherwise attach to) the child's standard handles? | 23:42 | |
Oh, in case it wasn't clear ... the --min-time flag is a flag for the analysis phases, and acts as a filter on the timing data. The timing data files always include all the collected info, so you needn't do new benchmark runs just to play with that particular knob. | 23:44 | ||
timotimo | japhb: should we teach perl6-bench to build multiple components in parallel? | 23:45 | |
japhb | timotimo: I had initially *not* done that because multiple rakudos building at once could OOM a box. But maybe it's time to consider a flag or env var for that. | 23:46 | |
timotimo | hah | 23:47 | |
aye | |||
japhb | Let me put it this way ... I'm happy to test async spawn functionality in r-m by implementing parallel checkout builds in p6-b. :-) | 23:49 | |
timotimo | i'm off for tonight | 23:53 | |
o/ | |||
japhb | o/ | 23:55 |