00:42
BinGOs joined
|
|||
[Coke] finds that once, somewhere, jonathan used the wrong email address in a commit. | 00:45 | ||
00:51
dalek joined
00:59
dalek joined
01:12
BinGOs joined
01:37
dalek joined
02:26
BinGOs joined
04:45
ilbot3 joined
04:52
flussence joined
06:30
BinGOs joined
|
|||
tadzik | ah, doing releases, I see :) | 06:58 | |
07:09
vendethiel joined
08:07
domidumont joined
08:18
FROGGS joined,
dalek joined
08:22
BinGOs joined
08:29
zakharyas joined
08:38
BinGOs joined
09:02
zakharyas joined
09:23
zakharyas joined
09:32
dalek joined
09:36
Ven joined
09:41
nebuchadnezzar joined
09:48
kjs_ joined
09:58
Ven joined
10:41
domidumont joined
10:42
flaviusb joined
11:18
zakharyas joined
12:09
ggoebel7 joined
12:22
Ven joined
12:24
domidumont joined
12:28
ShimmerFairy joined
12:31
Peter_R joined
13:01
domidumont joined
13:38
kjs_ joined
13:52
ShimmerFairy joined
14:03
ggoebel7 joined
14:26
domidumont joined
14:46
zakharyas joined
15:34
domidumont joined
|
|||
timotimo | on my JSON::Fast benchmark, self times are interesting: 11% Self on MVM_frame_dec_ref, 10% on MVM_interp_run, 8.23% on MVM_fixed_size_alloc, 5.11% on MVM_frame_acquire_ref, 4.74% on MVM_frame_invoke, 2.68% on MVM_frame_inc_ref_by_frame (with a few things in between) | 15:55 | |
15:57
ggoebel7 joined
|
|||
timotimo | with a check for num_user_threads == 0, the self gets down to 8.18% | 16:00 | |
(as reported by perf) | |||
my naive attempt to implement MVM_frame_acquire_ref seems to not work :\ | 16:07 | ||
i'll run a full spec test now. | |||
16:09
brrt joined
|
|||
timotimo | i think it should be safe to do the checks there, as going from 0 to 1 user thread cannot happen while inside the non-threaded version of these operations | 16:12 | |
and the other direction would just mean that we accidentally do the checks with atomic ops at least once when not needed | |||
could it be problematic if the threads somehow go from 1 to 0 to 1? | |||
brrt | good * #moarvm | 16:16 | |
timotimo | heyo brrt! | 16:17 | |
brrt | hey timotiom | ||
timotimo | |||
timotimo | i'm starting to miss the ability to have perf show me disassembly of jitted frames :| | ||
brrt | my win10 download has disappeareed for some reason | ||
timotimo | :o | ||
disappeared?! | |||
brrt | yeah, weird | ||
why can't perf do that? | |||
what would you need for it to do that? | 16:18 | ||
timotimo | i expect we need to export the perf map thingie that tells it where things start and end? | ||
brrt | hmmm | ||
supposedly, yes | |||
timotimo | i should verify my claim before sending you off on a goose-chase! | 16:19 | |
brrt | jit integration with external tooling would be a nice goal to have | ||
timotimo | on the other hand, i can just let the jit export the .o files, eh? | ||
brrt | yeah, but they won't be ELFs | ||
timotimo | but that won't give me per-instruction timings | ||
as long as i can dump the assembly, that'll help a little bit | |||
but they don't show what source bytecode what assembly op comes from, eh? | |||
brrt | no, they don't | 16:20 | |
i can usually tell with the jit log in hand | |||
but it's not automated | |||
timotimo | bleh. lowlevel/lock.t and promise/start.t seem to hang here | ||
is "hang with cpu usage non-zero" livelock and "hang with no cpu usage" deadlock? | 16:21 | ||
brrt | yes | ||
timotimo | as in: is that the correct differentiation metric? | ||
JimmyZ | you may like ktap since SystemTAP is hard to use on ubuntu/debian | 16:23 | |
which is easy to use as per | |||
timotimo | is that the right thing to use here? ktap sounds a bit like a kernel tool? | 16:24 | |
JimmyZ | *perf | ||
[Coke] sighs as jvm spectest is also dying. | |||
brrt | i think that is right, yes | ||
JimmyZ | you can use it to gen Flame Graph | ||
[Coke] | nine: ===SORRY!=== | 16:25 | |
Could not find Test:ver<True>:auth<True>:api<True> in: | |||
on the jvm. updating again... | |||
timotimo | brrt: do you have a clue how good our current jit is with IntLexRef? | ||
JimmyZ | [Coke]: moarvm here :) | ||
brrt | no clue timotimo | ||
timotimo | every instance of $pos = $pos + 1 is two getlex, a decont_i, an add_i, an assign_i; i wonder if it's cheap or expensive | 16:26 | |
and i use that a whole lot in my code | |||
also every reference to $pos is, of course, a getlex and a decont_i | |||
brrt | y not $pos++ | 16:27 | |
timotimo | because that's a million times more expensive :) | 16:28 | |
brrt | but to be honest.. .we need heroic optimization before we ever see the JIT, before we get there | ||
why :-( | |||
timotimo | m: my int $foo = 0; while $foo < 10_000_000 { $foo++ }; say now - INIT now | ||
camelia | rakudo-moar 0a61b9: OUTPUTĀ«6.1351965ā¤Ā» | ||
timotimo | m: my int $foo = 0; while $foo < 10_000_000 { $foo = $foo + 1 }; say now - INIT now | 16:29 | |
camelia | rakudo-moar 0a61b9: OUTPUTĀ«0.0661555ā¤Ā» | ||
timotimo | oh, just a hundred times | ||
lexical references passed to operators are currently preventing inlining in both the static and the dynamic optimizer | |||
for ... some reason | |||
m: sub dotheloop(int $foo is rw) { while $foo < 10_000_000 { $foo = $foo + 1 } }; my int $bar = 0; dotheloop($bar); say now - INIT now | 16:30 | ||
camelia | rakudo-moar 0a61b9: OUTPUTĀ«0.349984ā¤Ā» | ||
timotimo | wowza | ||
[Coke] | JimmyZ: whoops, ww. | ||
timotimo | look at that, it's 5 times slower with the intlexref | 16:31 | |
however, i have no clue if that slowness impacts my JSON::Fast times at all | |||
or if it's other stuff | |||
brrt | timotimo: i was thinking of writing, for the perl6 advent calendar, a post describing how to write performant perl6 code | 16:36 | |
in fact, i was thinking of writing a msgpack module | |||
timotimo | do you really want to tell people "yeah, just put 'use nqp' at the top and throw away all the nice operators we have. also, don't use variables anywhere!"? :) | 16:37 | |
brrt | not because msgpack is any good, it isn't, but because it uses binary stuff rather nicely | ||
hmmm | |||
good point | |||
how well do native types work these days? | |||
timotimo | "if you can, write your loops as SEQ( ... ) while ..." :P | ||
they work rather well. especially now that we can pass native vars around as "is rw" | |||
brrt | seq? | 16:38 | |
well, hmm... | |||
timotimo | basically what do { .. } does, but without a lexical scope | ||
and without an invocation or anything | |||
brrt | oh really | ||
timotimo | i used it to reduce the number of BOOTCode allocations in nom-ws | ||
wasn't worth terribly much, because nom-ws only takes a small part of the complete time | 16:39 | ||
and there's still the CATCH in there to catch what nqp::ordat does when it reaches beyond EOS | |||
hm. perhaps it'd be performant to put an actual bounds check there. | |||
AFK for a bit | 16:40 | ||
i'm not against a post "writing performant code", but there are these caveats :( | |||
hoelzro | o/ #moarvm | 16:41 | |
brrt | good * #moarvm | 16:42 | |
eh hoelzro | |||
hoelzro | o/ brrt | 16:43 | |
timotimo | found the answer to my question about assign_i: of course we're not doing that extremely well. otherwise it'd be a sp_bind_i64 or a p6obind_i | 17:11 | |
probably the former | |||
brrt | aye | 17:20 | |
17:20
kjs_ joined
|
|||
brrt | diakopter: i'm trying to install windows 10 + vs2015 now... not sure what i'll need, but i'll keep you posteed | 17:21 | |
i'm not supposed to like it, but windows 10 is actually quite nice | |||
timotimo | oh, sp_bindi64 isn't right; there needs to be a pointer deref in the middle. so new spesh ops are needed | 17:35 | |
TimToady needs to rename SEQ to avoid confusion... | 17:49 | ||
since "sequence" is already overloaded two ways without that | |||
timotimo | tell me when that happens :) | 17:51 | |
or perhaps have a deprecation cycle? or is SEQ really not meant to be for end-users at all? | |||
TimToady | we never specced it... | 17:58 | |
at a time when we were still trying to spec everything :) | |||
it doesn't occur in roast, so it's not officially Perl 6... :P | |||
maybe we need to put in all the C operators as C|| C<< C, and such... | 17:59 | ||
timotimo | MVMInt64 *target = *((MVMInt64 *)((char *)o + GET_UI16(cur_op, 2))); | 18:00 | |
*target = GET_REG(cur_op, 4).o; | |||
i *think* this is what i mean when i say: | |||
TimToady | but now this is language design, so OT :) | ||
[Coke] | at this point, we should probably gut everything in advance of a release that is officially deprecated, and not ship v6.c with deprecations baked in. | ||
timotimo | at the offset "cur_op, 2" there is a pointer to an MVMInt64. i want to set the target of the pointer to the value "cur_op, 4" | ||
except that needs to end in .i64 | |||
i think the * after the target = may be wrong | 18:01 | ||
i know that if i put an & there i get the address of the pointer i wanted to follow. that's not the right thing. | 18:02 | ||
if i just put the thing there, will C assign the address of the RHS into the LHS, too? or would that require a & there? | 18:03 | ||
i think assigning a pointery thing to a pointer variable just updates the pointer to point at the same thing | |||
oh, brrt left | 18:07 | ||
i was about to ask him to implement that in the jit, please :D | |||
poor him | |||
18:13
pyrimidine joined
18:25
diakopter joined
18:47
domidumont joined
18:48
diakopter joined
|
|||
timotimo | the implementation seems wrong | 19:00 | |
at least i'm getting quite wrong values | |||
shows what i know about pointer arithmetic and such :) | 19:01 | ||
19:03
diakopter joined
|
|||
TimToady | timotimo: is SEQ actually being used in the ecosystem? | 19:12 | |
timotimo | only in JSON::Fast since the very latest commit | 19:13 | |
TimToady | because I'm gonna break it... | ||
timotimo | and perhaps tadzik just merged that commit in :) | ||
TimToady | it'll rename itself to STATEMENT_LIST | ||
timotimo | ah, not in panda yet | ||
TimToady | well, it'll fail with an obvious message :) | ||
timotimo | it'll rename itself? that's nice, so i don't have to do anything? :) | 19:14 | |
TimToady blames the french... | 19:17 | ||
dalek | arVM/spesh_nativeref_assign_decont: c7706c4 | timotimo++ | / (6 files): A spesh op like sp_bind/get_i64 with an extra pointer deref |
19:48 | |
arVM/spesh_nativeref_assign_decont: de68134 | timotimo++ | src/ (2 files): Allow NativeRef to spesh assign_i and decont_i this uses the op the previous commit introduced. |
|||
arVM/spesh_nativeref_assign_decont: 6a95b60 | timotimo++ | src/jit/ (2 files): implement sp_deref_bind/get_i64/n in the JIT |
20:15 | ||
timotimo | i implemented stuff in the jit and ... it got slower?! | 20:19 | |
[Coke] | timotimo: more switching between jit and non jit? | 20:21 | |
21:00
synbot6 joined
|
|||
timotimo | nah | 21:32 | |
these frames in question were jit compilable before, then became non-jit-compilable when i introduced sp_bind_i64 and friends and then became jit-compilable again when i implemented them | 21:34 | ||
jnthn | If you're trying to mesaure changes at that level, you probably need something that can tell you stuff like how many instructions were retired | 21:36 | |
And maybe cache stats | |||
timotimo | that'd be a better metric, i agree. | 21:37 | |
but i was hoping the change would be noticable | 21:38 | ||
since assign_i and decont_i weren't even going through the REPRop devirtualization yet | |||
hmm. 14.5 vs 16.2 | 21:41 | ||
12.65 was the time earlier today | 21:42 | ||
before i started touching moar. and now that same task costs 14.5?! | |||
21:50
diakopter_______ joined
|
|||
diakopter_______ | timotimo: jitting is expensive! | 21:53 | |
what are the units there | |||
22:14
diakopter_______ joined
|
|||
timotimo | seconds for the file i'm parsing with JSON::Fast | 22:15 | |
diakopter_______ | eek | ||
I was hoping you'd say microseconds | |||
timotimo | hahahaha | 22:16 | |
yeah, right | |||
not this year, my friend | |||
22:30
kjs_ joined
|
|||
diakopter_______ | timotimo: hoping, for the code's sake, I mean | 22:33 | |
timotimo | oh, like ... if it ain't microseconds, it'll get to spend a lot more time under my thumb | 22:39 | |
22:44
njmurphy_ joined
|
|||
lizmat | another P6W: p6weekly.wordpress.com/2015/11/30/...ly-splits/ | 22:55 | |
diakopter_______ | lizmat++ | 22:57 | |
jnthn | lizmat: nice! :) | 22:59 | |
lizmat++ | |||
diakopter_______ | here's a gem from the reddit comments linked: "Rakudo's had more testing since it's been around forever but MoarVM is where my hopes lie." | 23:02 | |
er, I mean HN comments | |||
here's another "Want to get Perl 6 running on the .Net CLR? Implement an NQP interpreter (which is supposed to be fairly easy) and you're 99% done (at least that's my understanding)." | 23:03 | ||
.oO( have you ever squelched a laugh so hard you cried silently?? ) |
23:04 | ||
jnthn | "fairly easy" :D | ||
timotimo | lizmat: did you also post it on #perl6? :) | ||
lizmat | yes | 23:07 | |
but I think it got snowed under there | |||
diakopter_______ | this one makes me cry in other ways: "Show me the more advanced parts of the language, are they transducers, monads, functors, natural transformations, auto-compilers, self-replicating systems, high AI in action, ML, NLP. What is the honey spot for this new language?" | 23:09 | |
timotimo | i wish it had said "MLP" instead | 23:16 | |
but damn! they found out perl6 does nothing in particular excellently! nooooooo my only weakness! | 23:17 | ||
23:22
diakopter_______ joined
|
|||
diakopter_______ | anyone have an interest in making a port of MoarVM/rakudo for seL4? sel4.systems/Info/Docs/seL4-manual-2.0.0.pdf | 23:45 |