01:03
FROGGS_ joined
02:21
lue joined
03:52
brother| joined,
sergot_ joined
03:55
ilbot3 joined
04:11
ilbot3 joined
04:21
cognome joined
04:23
zakharyas joined
04:33
zakharyas1 joined
05:00
itz_ joined
05:10
japhb_ joined,
btyler_ joined
06:05
itz joined
07:19
brrt joined
|
|||
brrt | \o | 07:20 | |
timotimo | o/ | 07:21 | |
when gsoc is over, i'll be missing the rapid fire of new jit features :S | 07:22 | ||
i suppose i'll just have to get my own hands dirty writing a bit of assembly for the jit :\ | |||
brrt | i suspect the fire won't be so rapid anymore, no | 07:31 | |
i'm enrolled for my next year btw :-) | 07:32 | ||
timotimo | university? | ||
brrt | yes, in energy-and-environmental sciences | 07:34 | |
timotimo | oh | ||
that sounds good :) | |||
brrt | if all checks out i'm going to work on smart grid technology :-) | ||
timotimo | that's way cool. | 07:36 | |
brrt | yeah, i hope it is | 07:38 | |
brb :-) | 07:44 | ||
nwc10 | timotimo: well volunteered :-) | 07:50 | |
moritz | ... and energy-and-environmental folks have good chances to work in data centers too :-) | 08:08 | |
timotimo | perl6 doesn't have good chances yet, but by the time brrt graduates maybe it will :P | 08:09 | |
jnthn | morning o/ | 08:19 | |
nwc10 | \o morning | 08:25 | |
08:48
brrt joined
|
|||
brrt | morning jnthn | 08:49 | |
08:51
klaas-janstol joined
|
|||
brrt is wondering how to fast implement floor() in asm | 08:53 | ||
jnthn is trying le_I and friends :) | |||
moritz | brrt: aren't there rounding primitives the in SSE instructions? | 08:54 | |
brrt | i'd think so | ||
but sse instruction set aren't exactly... ehm... googleable | |||
timotimo | jit operation implementation: where will it end?! | ||
jnthn | When we jitted all the ops that are likely to show up on hot paths :P | 08:55 | |
moritz | softpixel.com/~cwright/programming/simd/sse.php | ||
brrt | hey, that's handy :-) | 08:56 | |
08:56
donaldh joined
|
|||
moritz | brrt: I just googled for 'rounding sse' :-) | 08:56 | |
brrt slight facepalm | |||
timotimo: steve-yegge.blogspot.nl/2007/06/ric...-food.html | 09:00 | ||
with regards to the question 'how long will we be busy with the JIT compiler' ;-) | 09:01 | ||
nwc10 | brrt: can you cheat - write C, get the compiler to output assembler, see what it chose? | 09:07 | |
brrt | of course | ||
thats exactly what my 'asmof' bash script does ;-) | |||
nwc10 | also, it occurred to me - IIRC it was timotimo who added "a" and aggregated the bail out logs | ||
timotimo | yup, that's me | 09:08 | |
nwc10 | is it viable to fix it to only start logging bail out after stage 0? | ||
in some way? | |||
because basically stage 0 doesn't matter, and will solve itself after the next bootstrap update | |||
timotimo | a few weeks/months(?) earlier i suggested allowing to put some special character at the start or end of the env var to switch between append and overwrite | ||
nwc10 | one possible way is "rm" as part of the makefile at the end of stage 0 | ||
timotimo | another is to just "make m-bootstrap-files" | ||
you don't have to commit that | |||
nwc10 | aha that's probably the best way | 09:09 | |
timotimo | it's the simplest at least | ||
brrt | i think that was very recent when you suggested that timotimo | ||
jnthn | Aye. And a bootstrap update even on my zippy machine is a few of seconds off every NQP build | ||
timotimo | nice. | ||
jnthn | So we might just want to go for it at some point soon anyway. | 09:10 | |
nwc10 | other other thing I thought, which might be a repeat of what's already said, or might be "too early" - for things like "JIT a few bigint ops." - is it possible to programatticaly generate both the code in interp.c and the JIT code for the OP, from a common definition? | ||
jnthn: parallel tests for NQP would also shave time, at least on POSIX platforms | 09:11 | ||
jnthn | How do we tweak the Makefile to have that happen? | 09:16 | |
moritz | prove -j 4 | 09:17 | |
09:17
lizmat joined
|
|||
moritz | that'll run 4 jobs in parallel, unconditionally | 09:18 | |
jnthn | Yeah, I was more thinking "pay attention to the TEST_JOBS env var" | ||
moritz | (that is, independent of th enumber of cores) | ||
brrt | basically, floor() is a function call, and i'm wondering if it could not be | 09:20 | |
if that would be worth the trouble | |||
nwc10 | I don't know for x86 or x86_64 | ||
IIRC it's viable in ARM assembler | |||
moritz | jnthn: probably easist would be a small wrapper around prove that adds -j $ENV{TEST_JOBS} if $ENV{TEST_JOBS} is set | 09:21 | |
jnthn | Right. Like a t/harness in Rakudo but simpler | 09:22 | |
moritz | aye | ||
09:23
FROGGS__ joined
|
|||
dalek | arVM: d85a1df | jnthn++ | src/jit/ (2 files): JIT [eq|ne|lt|le|gt|ge]_I. |
09:29 | |
brrt | it's basically, not so feasible to implement floor | ||
cuz corner case | |||
jnthn | .oO( a floord plan... ) |
||
moritz | I wonder if it would be a (big?) speedup to first check if both bigints are actually stored as small integers, and if yes, use the direct comparison | 09:34 | |
brrt | uhm, what is the plan in mod_n if any is NaN | 09:35 | |
timotimo | i think it'd result in NaN? | 09:36 | |
dalek | arVM: fb7a4a5 | jnthn++ | src/ (4 files): JIT getlexouter. |
09:39 | |
jnthn | BAIL: op <sp_guardcontconc> | ||
Aww! | |||
timotimo | contconc does sound cute. | ||
jnthn | Bailing on it ain't though :P | 09:42 | |
09:43
donaldh joined
|
|||
brrt is going to skip mod_n for now | 09:51 | ||
in real code, it should be rare, because really, who does that | |||
timotimo | aye | 09:54 | |
it gets replaced by mod_i for almost all cases now | |||
it was "just" an oversight in the nqp optimizer :) | |||
dalek | arVM: a7b0a1a | jnthn++ | src/jit/graph.c: JIT capturelex. |
09:58 | |
nwc10 | "I" need a faster machine. The goalposts move faster than the build cycle | ||
timotimo | heh heh :) | 10:02 | |
maybe the build just needs to get even faster :D | |||
brrt | uhm | 10:07 | |
can we switch contconc for sp_guardconc, decont, sp_guardconc? | 10:08 | ||
hmm | |||
or wait | |||
if contspec->fetch invokes, then sp_guardcontconc is wrong | 10:09 | ||
jnthn | I'm pondering a variant of the guard which can just index straight into the container type... | ||
brrt | so i assume there's a check for contspec->fetch_never_invokes in spesh | 10:10 | |
the simpler the better | |||
jnthn | Yes, there's a check for that in spesh | ||
So it can never invoke | |||
brrt | ah ok | ||
good | |||
then the conversion into 3 ops is overkill | |||
10:17
klaas-janstol joined
|
|||
dalek | arVM: 9573e69 | (Bart Wiegmans)++ | src/jit/ (2 files): JIT sp_guardcontconc |
10:32 | |
jnthn | ooh :) | ||
nwc10 | sorry for the naive question - why is that one particulary ooh-worthy? | 10:39 | |
jnthn | Because it's extremely common in spesh'd Perl 6 code | 10:51 | |
m: say 4.8 / 5.3 | |||
camelia | rakudo-moar 88326e: OUTPUTĀ«0.905660ā¤Ā» | ||
jnthn | Allows JITting of things that saves 10% off while_hash_set benchmark | 10:52 | |
And likely many similar ones | |||
timotimo | neato :) | 10:53 | |
so, if i understood correctly, dynasm currently lacks support for supplying registers from a variable and thus we have to move all our data from heap to registers and back to the heap and cannot keep data in registers between emitted ops, right? | 10:54 | ||
jnthn | Yes; making dynasm handle that is only part of the story, though. | 10:55 | |
timotimo | yes, after that we'll need to have a register allocator that shuffles around which register stores what for how long | 10:56 | |
what else am i missing? | |||
jnthn | That you musn't cheat in ways that break deopt | 10:58 | |
timotimo | oh | 10:59 | |
so where-ever we deopt, it must either look like we never did the register allocation stuff or we have to store everything back the way it would have been | |||
jnthn | Yes | 11:00 | |
timotimo | oh, another unrelated question: that Frame 1, with the ~2000 locals ... we return from that before we go on to run user code, right? | ||
jnthn | Well, not *everything* | ||
timotimo | as in: that doesn't sit on the stack, making every garbage collection run 2000 local references more expensive etc? | ||
jnthn | No, Frame 1 is the outer scope of the running program | ||
In the grand scheme of things, 2000 locals is a drop in the ocean given the amount of things a GC run might consider. | 11:01 | ||
timotimo | hm. | ||
if it's cheap, i suppose it's fine. | 11:02 | ||
before: 3940src/vm/moar/stage0/ | 11:10 | ||
after : 3876src/vm/moar/stage0/ | |||
not overwhelming, but it's a difference :) | |||
This is MoarVM built with JIT support version 2014.07-375-g8b1c1a0 | 11:28 | ||
does that look good? jnthn? | |||
jnthn | I might put "built with JIT support" at the end | 11:29 | |
timotimo | i had that first, but then i thought "maybe someone would be matching the version by doing words()[*-1]" | 11:30 | |
nwc10 | if they do that, that's their problem | ||
timotimo | OK :) | ||
nwc10 | it feels like optimising for the uncommon case | ||
dalek | arVM: e97226e | (Timo Paulssen)++ | src/main.c: let --version advertise jit support |
||
nwc10 | m: say my $o = 5.6177e+01; my $n = 5.5998e+01; say $n/$o; say $n/6.597e+01 | 11:40 | |
camelia | rakudo-moar 758974: OUTPUTĀ«56.177ā¤0.996813642593944ā¤0.848840381991815ā¤Ā» | ||
nwc10 | oops | ||
m: my $o = 5.6177e+01; my $n = 5.5998e+01; say $n/$o; say $n/6.597e+01 | 11:41 | ||
camelia | rakudo-moar 758974: OUTPUTĀ«0.996813642593944ā¤0.848840381991815ā¤Ā» | ||
nwc10 | OK, so slightly faster than "last" time and quite a bit faster than about 2.5 weeks ago | ||
timotimo | should the exit code for --version be a different one from "successfully ran a user program"? | 11:42 | |
nwc10 | Perl 5, Python and Ruby all seem to exit 0 | 11:43 | |
tclsh doesn't understand --version | |||
timotimo | OK | 11:44 | |
jnthn | bbiab | 12:06 | |
12:27
brrt joined
13:21
klaas-janstol joined
13:42
brrt joined
13:50
jnap joined
|
|||
brrt | hmm | 14:02 | |
i'm still wondering how to refactor param_*_? | 14:03 | ||
any advice? | |||
jnthn | brrt: Passing a pointer to the reg in and returing something that indicates existence could do it | 14:15 | |
brrt | hmm yeah | ||
jnthn | brrt: And you just disregard the return value for the required variatns | ||
brrt | do we still need the 'required' field then? | ||
jnthn | Since it'll never return but then throw | ||
brrt | we could handle the exception in the interpreter | ||
true | |||
but, there are non-interpreter uses of these functions, and these would like to have the object, not a register to put them in | 14:17 | ||
jnthn | Those are confined to bootstrap.c though? | ||
And I suspect we can factor out a helper static function to make it convenient for those | 14:18 | ||
They are absolutely not hot path at all | |||
brrt | hmm yeah i suppose you're right | ||
ok | |||
i'll get to that then | |||
(finally i might add) | |||
jnthn | \o/ | ||
brrt | though adding a fifth argument might make a speed loss on win64 systems | 14:21 | |
brrt afk for a bit | 14:26 | ||
14:26
brrt left
14:39
donaldh_ joined
14:42
ggoebel1111117 joined
|
|||
[Coke] | jnthn: all set for brrt's review on GSOC? | 15:18 | |
just want to make sure he has no surprises. | |||
jnthn | [Coke]: Yes, will be ready to submit the eval on Mon/Tue from my side :) | 15:22 | |
dalek | arVM: e953112 | jnthn++ | src/ (4 files): Support write/close of STDIN for async proc. |
15:26 | |
japhb | \o/ # async STDIN! | 15:27 | |
jnthn | Just got it to write to clipboard :) | 15:29 | |
my $proc = Proc::Async.new(path => 'c:\windows\system32\clip.exe', :w); | |||
my $proc_done = $proc.start; | |||
await $proc.say('omg stuff from rakudo'); | |||
$proc.close_stdin; | |||
await $proc_done; | |||
btyler_ | ooooh, cool | 15:30 | |
japhb | Awesome sauce. | ||
Is there a single place to look at all these examples? | 15:31 | ||
jnthn | No | ||
I've just had a file that I've been scribbling bits in | |||
japhb chuckles | |||
jnthn | I should probably turn this into a p6doc entry :) | ||
japhb | Yes please. :-) | ||
dalek | arVM: 610e8d0 | TimToady++ | src/core/frame.c: don't pass dynvar metrics we don't use currently |
15:35 | |
[Coke] | moar still busted in daily runs. | 15:52 | |
(moar jit is fine) | |||
nevermind, I'm an idiot. it'll be fine tomorrow. | 16:00 | ||
16:22
zakharyas joined
|
|||
jnthn | oh noes, who bust the maor build... | 16:29 | |
hoelzro | I've been seeing more problems with mokudo since last I built it | 16:31 | |
FROGGS | not me :P | ||
dalek | arVM: 7cfcdba | jnthn++ | src/jit/emit.h: Must mark thing used in main MVM_PUBLIC. |
||
hoelzro | git bisect points to 49f19ca | ||
jnthn | hoelzro: Hm. That's an odd thing to cause problems; if anything, it's causing less optimization to happen... | 16:32 | |
FROGGS | hoelzro: what kind of problems? | ||
hoelzro | FROGGS: segfaults during tests of a module I've been working on | 16:33 | |
FROGGS | eww | ||
hoelzro | yeah =/ | 16:34 | |
timotimo | did you try the usual MVM_SPESH_INLINE_DISABLE, MVM_SPESH_DISABLE dance? | ||
FROGGS | can you golf it down? | ||
hoelzro | I never learned that dance | ||
FROGGS: after work, I can try | |||
FROGGS | nice :o) | ||
hoelzro | I saw it this morning, and git bisect takes little attention but a lot of time, so I figured I could do that while I work on work stuff =) | 16:35 | |
timotimo: what dance is this, btw? | 16:39 | ||
timotimo | setting MVM_SPESH_INLINE_DISABLE=1 and trying it, then setting MVM_SPESH_DISABLE=1 | ||
that way you can kind of find out if spesh is likely to blame | |||
hoelzro | timotimo: that "fixes" it | ||
(MVM_SPESH_INLINE_DISABLE=1, that is) | |||
timotimo | ah | ||
that could be a hint! | 16:40 | ||
jnthn | Can you try s/INLINE/OSR/ instead? | ||
japhb | Well, it *is* a hint, it just could be a red herring also. :-) | 16:41 | |
hoelzro | MVM_SPESH_OSR_DISABLE=1 perl6 t/05-cmd-options.t segfaults | ||
japhb | .oO( Clupeidae, 7000 Ć
) |
16:42 | |
jnthn | That narrows it down a good bit | ||
hoelzro | the repo is at github.com/hoelzro/Subcommander if anyone wants to take a look | 16:45 | |
I can try to golf it down after work | 16:46 | ||
but it's StarCraft night tonight, so I might not get around to it until tomorrow morning =) | |||
dalek | arVM: 079d3bd | jnthn++ | src/strings/ops.c: Add a mechanism for debugging strand issues. |
17:08 | |
arVM: 010a964 | jnthn++ | src/strings/ops.c: Fix bug in string repeat reported by Mouq++. Fixes the crash in htmlify in p6doc. |
|||
FROGGS | jnthn: see perlcabal.org/syn/S05.html#Array_aliasing and perlcabal.org/syn/S05.html#Hash_aliasing | 17:34 | |
jnthn: now I think it is not LHF anymore... but probably doable | |||
timotimo | it used to be an LHF, now it isn't any more? | 17:40 | |
jnthn | The tree grew... :P | 17:44 | |
Yeah, looks a little tricky | 17:50 | ||
dinner; bbiab | |||
timotimo | jnthn: if we are clever about it, we can arrange the numbers from 0 to 64 in a string that's shorter than 10 + 54 * 2 characters! :) | 18:01 | |
by using strands and references to substrings and such | |||
[Coke] | is that triciest worth it? | 18:10 | |
er, *trickiness. | |||
timotimo | i don't actually know how much shorter that'd end up being | ||
i also don't remember what that series is called that optimizes this kind of thing | 18:11 | ||
stackoverflow.com/questions/438935...-between-0 | 18:12 | ||
AKA en.wikipedia.org/wiki/De_Bruijn_sequence | |||
jnthn | Thing is, a strand itself needs a little space | 18:16 | |
So we almost certainly don't come out ahead | 18:17 | ||
18:20
klaas-janstol joined
|
|||
timotimo | aaw :( | 18:20 | |
18:22
klaas-janstol joined
18:43
tgt joined
|
|||
tgt | Hi. Calling nqp::p6listitems on a type object segfaults on moar. On parrot it says "cannot look up attributes in a type object". (I called ArrayĀ».say accidentally.) | 18:49 | |
jnthn | m: Array>>.say | 18:51 | |
camelia | rakudo-moar 0bbeda: OUTPUTĀ«(signal )Ā» | ||
diakopter | cool | ||
18:57
Ven joined
|
|||
jnthn | tgt: The SEGVs were easily fixed, but it shouldn't have been trying that anyway. | 19:10 | |
(That is, it's wrong on Parrot too) | |||
(And now it just gives an exception on Moar) | |||
timotimo | any fruits of the low hanging kind around tonight? | 19:11 | |
jnthn | timotimo: Maybe some JIT? :) | 19:12 | |
Are existspos and assign JITted, for example? | 19:13 | ||
timotimo | i think i've seen brrt commit assign and assignunchecked | ||
i think i built existskey, but not existspos | |||
jnthn | OK. existspos is hit by every array access | ||
(in Perl 6) | |||
timotimo | seems like i'll have to write MVM_repr_exists_pos first | 19:14 | |
19:14
klaas-janstol joined
|
|||
timotimo | well, that was easy :) | 19:15 | |
Stage parse : 27.635 - on my laptop with jit turned on ... | 19:19 | ||
Stage parse : 28.208 - with jit disabled | 19:20 | ||
^- yay | |||
hoelzro | up next: fusion starts to pay off ;) | ||
diakopter | how much of that 27.6 is the jitting | 19:21 | |
timotimo | don't know :\ | ||
diakopter | is it in a background thread yet? | ||
timotimo | no | 19:22 | |
we also don't do the free-ing in a background thread yet either | |||
diakopter | ah | 19:23 | |
timotimo | i'll just push my changes and then i'll be AFK for a bit | 19:24 | |
dalek | arVM: 58902e7 | (Timo Paulssen)++ | src/ (3 files): existspos existsjit |
19:25 | |
19:48
klaas-janstol joined
|
|||
nwc10 | timotimo: PASS (except for the usual sin. Sadly) | 20:04 | |
20:18
jnap joined
21:52
zakharyas joined
23:38
colomon joined
|