00:00 vendethiel joined 01:29 vendethiel joined 01:55 Ven joined 04:43 vendethiel joined 05:11 vendethiel joined 05:35 vendethiel joined 06:42 vendethiel joined
JimmyZ timotimo: github.com/japhb/perl6-bench/pull/...28be71e9R1 # I got a much faster version, which is faster than Lua 5.1.5 :P 06:59
timotimo what. 07:00
JimmyZ timotimo: but I port it to perl6, it 5x slower
:(
timotimo right
:\
we've got a lot of stuff ahead of us in terms of optimizations still 07:01
JimmyZ the nqp version is fast enough, 83s
timotimo i wonder if we should attempt to do code-gen in BUILDALLPLAN 07:02
rather than iterate over the build plan, we could generate a short method 07:03
JimmyZ now the 3 test speed is very different, which is ok to exist, unless there are the same speed
*are
timotimo: yeah, the constuctor does too much work 07:04
timotimo well, to be fair, derived classes make it a tiny bit more complicated :) 07:05
JimmyZ eah 07:08
*yeah
timotimo well, at some point we'll have "final" classes or "closed" or whatever we call that 07:09
when we have a type that we know is final, we can do a bit more agressive optimizatifying
except, there's always roles that may be mixed into the stuff we're working with
JimmyZ the 83s one is good for testing vm opitmization though ;) 07:10
timotimo SGTM 07:12
have you looked at the way it speshes yet?
07:12 lizmat joined
JimmyZ timotimo: I didn't, I' on a slow x86 machine, while hack.p6c.org is so slow I can't do things on it 07:13
hack.p6c.org network. 07:14
timotimo ah, only the network 07:19
fair. i'll have a look in a couple of hours
JimmyZ That'd be nice ;) 07:20
timotimo have you tried using nqp::create in the perl6 version as well? 07:21
that'd show how much overhead the constructor has
at least i think so 07:22
JimmyZ timotimo: github.com/japhb/perl6-bench/pull/...a9b01d8eR1
timotimo oh, huh.
JimmyZ each one has a nqp version 07:23
timotimo GTG for now 07:24
JimmyZ bye
hmm, add a multi add method, 83s -> 150s 08:14
timotimo huh, is something not getting speshed right? 08:19
JimmyZ don't know :( 08:21
08:22 vendethiel joined 08:47 vendethiel joined 09:06 dalek joined 09:08 FROGGS[mobile] joined 09:13 FROGGS joined 09:37 vendethiel joined 09:58 rurban joined 10:01 vendethiel joined
JimmyZ timotimo: I found nqp's multi method is 2x slower, but perl6's not :( 10:24
perl6's is the same speed
timotimo: github.com/japhb/perl6-bench/pull/...c1b2533R33 10:26
10:27 vendethiel joined
timotimo i'm not entirely sure how multi methods in nqp behave 10:56
12:37 vendethiel joined
JimmyZ jnthn: gist.github.com/zhuomingliang/78fa...16d2d5a890 # Is it right? added 3 MVM_ASSIGN_REF 15:13
timotimo JimmyZ: which one was i supposed to benchmark/spesh-analyze? 15:22
JimmyZ nqp/point_class_add2 15:23
timotimo thx
oh, so nqp?
JimmyZ if you have a interest about multi method, that is nqp/point_class_add2_multi_method :P 15:24
timotimo thought so
which of the perl6 versions is most interesting to analyze?
JimmyZ if you want to optimize rakudo buildplan, that's perl6/point_class_add 15:25
timotimo i wish i could 15:26
i see nothing obvious that i'd have sufficient time for right now
JimmyZ if you want spesh, that's perl6/point_class_add2
timotimo i'll probably need to reduce the number of iterations there, eh? :)
JimmyZ you mean buildplan? 15:27
timotimo yes
and number of iterations means the perl6 versions of the benchmarks
could you please use for ^$number instead of while ... ? :)
JimmyZ yeah, but better one gens codes something like nqp/point_class_add2 ;) 15:28
why ^$number? 15:29
even only the loop, without add, it's 1.2s, still slower than luajit one(which is with add and only 0.2s) :P 15:30
timotimo not really $number 15:31
whaaaaat
how can we be so slow?
i thought we can totally uber-jit that code by now??
JimmyZ timotimo: we have mov eax, WORK[src] etc.. 15:32
timotimo of course
JimmyZ and every op has it
timotimo the CPU isn't smart enough to optimize the assembly code for us? :) 15:33
damn, we need to do our own work then :(
15:33 vendethiel joined
JimmyZ yeah, every op we need access memory, luajit didn't do it. 15:33
timotimo gist.github.com/timo/1b806ded05324473b76e 15:38
15:41 FROGGS joined
timotimo it's pretty amazing how much spesh works before we even reach the user's code 15:42
the "new" method apparently calls wval twice, even though the bindattr calls have turned into sp_p6obind_n 15:45
not sure if it just doesn't debump the usage count
timotimo looks
the usages-- lines are commented out, so maybe it used to cause trouble 15:47
that results in better code during spesh now 15:51
JimmyZ hmm, looks like set op is needless? 15:57
and what sp_getspeshslot is doing there? looks like needless too? 16:02
dalek arVM: 383dac3 | timotimo++ | src/6model/reprs/P6opaque.c:
re-enable usage debump for setattr ops on p6opaque
16:04
timotimo how do you think? 16:05
set ops are often useless, but there's an added difficulty: our deoptimization strategy requires us to keep a bunch of "useless extra" registers around
getspeshslot and wval ops get kicked out often-ish now 16:06
JimmyZ think what? 16:09
timotimo about the patch i just pushed 16:10
16:11 zakharyas joined
timotimo in my case it makes the methods x and y faster, but new slower ... ?!? 16:11
JimmyZ I still don't know MVM_spesh_use_facts vs usage--; 16:12
timotimo the first is for kicking out guard instructions
the latter is for kicking out pure instructions that write to a register that has 0 (or less, i suppose) usages 16:13
JimmyZ ok, I think I know nothing about guard
:(
timotimo it's what log instructions turn into if we find the same value often 16:15
i don't understand why the bindattr_n calls in the new method don't get spesh'd into better variants 16:16
also, something must be wrong with the dump of facts, all the registers seem to have 0 usages 16:17
actually ... the fuck? no sp_getattr at all happens 16:18
ah, they are called sp_p6obind and p6oget*_* 16:19
JimmyZ because they allocates BOOTNum? 16:23
nqp/point_class_add2 vs perl6/point_class_add2, the code are the same(except s/:=/=/), but perl6 is 5x slower. if you compared it :P 16:31
which is good to compare it's codegen/spesh 16:32
16:33 japhb_ joined 16:35 carlin joined 16:36 dana joined, btyler_ joined 16:37 njmurphy joined 16:44 colomon joined 16:45 timotimo joined, dalek joined, woolfy joined
timotimo it uses bindattr_n directly 16:45
16:46 nine joined
timotimo the nqp version is hard to introspect because the code that gets generated is so slim already :) 16:49
JimmyZ yeah
16:50 njmurphy joined
JimmyZ it just needs allocation sink optimization and jit ... 16:51
timotimo "just" :)
but that could impact the perl6 version's performance positively
JimmyZ timotimo: the code in luajit 1000 lines ,but it needs to understand well to port moarvm, which is not easy 16:52
timotimo it could very well be that the impedance mismatch between moarvm and luajit's internals is so big that we can't "just port it"
JimmyZ timotimo: yeah 16:53
so it's not easy :(
01:00 am here ,good night 16:55
timotimo the amount of BOOTCode allocations is insane 16:59
16:59 synopsebot joined
timotimo 20% time spent in the GC 16:59
i'm not pleased
17:04 lue joined
timotimo is null a valid implementation of const_i64 r(...) liti64(0)? 17:18
17:31 Ven joined
TimToady the intent has been to compile the BUILDALLPLAN--that's why we removed the * from BUILD, to make that easier 17:53
timotimo oh, neat 18:07
do you have a good hunch what exactly we should use to create the compilation output? 18:08
QAST and getcomp's later stages?
TimToady has no clue what jnthn++ was intending to do 18:18
18:41 nine joined 19:48 FROGGS_ joined 20:40 zakharyas joined