01:55 ilbot3 joined 02:05 markmont joined 02:26 AlexDaniel joined 02:42 greppable6 joined 03:53 Ven`` joined 04:19 dogbert17 joined 04:20 lizmat_ joined 04:21 AlexDaniel joined 04:23 moritz joined 04:28 eater joined 07:25 domidumont joined 07:30 domidumont joined 09:17 leont joined
nine I won't be able to move all boxing into the HLL code. I'll have to box pointers, structs and carrays before I can give them back to HLL code and for that I'm still gonna need the return type object. 09:50
10:03 zakharyas joined
nine I'm slowly moving towards adding a MAST::NativeCall node type. 10:03
Native calls don't need to handle named arguments. But they do need the return type object. 10:06
10:34 zakharyas1 joined 10:53 leont joined 10:56 Skarsnik joined
jnthn nine: I'd be OK with a new node type if trying to sqish it into the existing one looks ugly 11:17
MasterDuke_ jnthn: re combining ssize and slots. can/should they be a struct? 11:20
jnthn MasterDuke_: You're thinking a struct that contains ssize and points to slots? 11:21
e.g. an extra LoI?
It may be a good way to go
My first thought was "sneak the ssize ahead of the slots in the same memory blog"
*blob
MasterDuke_ that's what i thought first, but then was chatting with timo and someone mentioned it maybe could be a struct 11:22
jnthn But...then I realized we tend to grow arrays by powers of 2, and stuff in userspace will assume powers of 2 are nice for the VM too
samcv i'm gonna fix `make realclean` so it doesn't error anymore
jnthn And so we'd then try to allocate space for, say, 8 pointers + 1 for ssize
samcv figured out the issue
jnthn Which is 9, which goes in the next bucket and wastes memory 11:23
More than if we allocated 2 pointers worth for ssize/slots and separately the slots
So I think maybe let's go that way 11:24
It's an extra dereference, but it's nothing worse than dynamic arrays as they show up on, say, JVM, CLR, etc.
MasterDuke_ ok, so i'll try moving ssize and slots into a struct
jnthn Plus the FSA means that we don't have any bookkeeping data before/ahead of the 2-pointer struct 11:25
timo huh, now that you point out to me that a struct would force another level of indirection, i'm no longer fond of that idea :|
jnthn timo: Well, I wasn't either, until I realized how allocating power of 2 + 1 was going to probably be horrible 11:26
timo jnthn, i majorly restructured my grant application and increased the hourly rate quite a bit as a reaction to channel feedback, would you take a minute or two to look over the new version some time today?
jnthn timo: And lead to cache pollution because of the extra memory unused in the next FSA bucket size up 11:27
timo: Sure, link?
MasterDuke_ ssize should become a pointer to MVMuint64 in the new struct? 11:28
jnthn Not a pointer, just a size
MasterDuke_ you mentioned two pointers? 11:29
jnthn Oh
Yeah, sorry. That was confusing, I was assuming 64-bit where ssize is equivalent to 1 pointer :)
Didn't mean anything by that really; my point was that if we break power-of-2 boundary expectations of, well, everything, then we're probably going to have a bad time 11:30
MasterDuke_ ah, yeah, that makes sense
timo docs.google.com/document/d/102h_Nl...Z3yfI/edit jnthn 11:34
jnthn timo: Are you thinking of the profiler UI gaining a server component, that uses, say, a sqlite DB? 11:41
A thing that I do miss in the heap snapshot analyzer is a snapshot diff 11:42
oh, you have it
:) 11:43
oh, and I found the answer to my first question too :)
timo yeah, just a little server component that can run queries for the frontend
i already made a "summary all" command that builds the summary for all snapshots and displays them in a table, but i couldn't run it yet because ram :D 11:44
and my "forget-snapshot" command didn't cause the snapshots to die
and running the heap snapshot profiler on the snapshot analyzer made moar crash in gc
jnthn It looks like a good grant app, and I'd really love seeing this work happen :) 11:45
timo++
timo you think the amount requested is also sensible? 11:46
jnthn I suspect the hourly estimate is a tad on the optimistic side 11:47
timo i rephrased the last bit of the "using a web browser" bit to point out that the launching part can also happen from inside the browser
jnthn But I haven't spent time costing it out, and you have :)
Cool
timo the estimates are rather rough, and probably too optimistic, but i'm having a hard time justifying an increased cost to myself
jnthn Estimates are always rough, that's the point :) 11:48
It's just that too much of our industry treats estimates as promises. 11:49
Anyway, I'd say the question is, "even if it goes over a bit, will I still be happy with this amount?" 11:50
MasterDuke_ it compiled, but kind of scared to try and run anything... 11:52
timo yeah, in reality i'll surely spend more than 150 hours 11:57
i should really bump up the estimate and pay amount. while i shouldn't make the claim outrageous (what my broken brain is telling me) but i shouldn't sell myself so short
MasterDuke_ this is getting a little interesting to test. a branch off a branch off a branch, and i'm not sure if i need to rebase master into each branch or just the last one... 11:59
timo if you rebase the tip of the last branch onto master, it'll take the whole "path" between your tip and master and turn that into a new series of commits 12:00
if the other branches diverge at some point from this new path, you'll want to rebase them onto whatever commit corresponds to their old divergence point on the new series of commits
(a graph on paper would really help here %) )
MasterDuke_ hm, rakudo built. heh, did i do something right? or something so wrong? 12:04
timo now try pushing onto an array simultaneously from 5 threads
MasterDuke_ hm, 'double free or corruption (!prev)' 12:08
m: my @a; start { @a.push: $++ for ^10 } for ^10; say +@a 12:09
camelia (signal ABRT)*** Error in `/home/camelia/rakudo-m-inst-1/bin/moar': double free or corruption (fasttop): 0x00007f81a0061300 ***
======= Backtrace: =========
/lib64/libc.so.6(+0x721af)[0x7f81b6e041af]
/lib64/libc.so.6(+0x77706)[0x7f81b6e09706]
/li…
MasterDuke_ if i had done it correctly, that shouldn't segv?
jnthn No. Should lose data but not SEGV. 12:10
jnthn gets live rock music on his street today
timo fantastic!
jnthn Opened the window to listen to it better. But now I can smell bbq sausages :) 12:11
timo oh no, so appetizing
jnthn I wonder if this is one of those "omg we just harvested grapes and made young wine!" celebrations :) 12:12
OK, that was the most stereotypical cover band thing to do ever: play the final countdown as your final song. :P 12:17
MasterDuke_ nice
timo i fondly remember the last time cover bands were in the vicinity 12:19
many of those bands totally butchered some good songs
it wasn't great :(
12:28 Skarsnik_ joined 12:30 domidumont joined
timo i think i'll send in the latest (and hopefully last) version of my grant application 12:32
12:44 Ven`` joined
MasterDuke_ hm, the segv is in the MVM_realloc here: github.com/MoarVM/MoarVM/pull/689/...e0f3a2R368 13:03
now to figure out why it's not taking the fsa path... 13:04
afk for a while
nine Ok, compiler is happy again, but running is still a different topic: 13:09
Bytecode validation error at offset 90, instruction 16:
expected instruction marked 'a' but got ' '
timotimo i wonder if we have to change the resizing functions to only read the current size once, for example, so that we don't get outdated sizes at the point where we actually call the realloc 13:18
nine: that happens when instructions are in between a set of instructions that don't allow other instructions in between
i.e. there's a starter and a stopper instruction for the "a" mark and there's instructions that are allowed between those two
for example, prepargs, arg_*, invoke_* 13:19
that's probably what bites you here?
nine I've got no idea how that could happen though. I'm using the same code as for other invoke ops 13:22
timotimo right, we don't really have a dumper at that point that could tell you what exactly it sees 13:38
can you output the --target=mast when you compile your code?
nine That's it: gist.github.com/niner/888eb7874caf...c01bba970f 14:04
14:08 MasterDuke joined
timotimo oh, huh. perhaps it's only visible in the final mbc 14:10
MasterDuke How can get the perl 6 name of the array in vmarray.c for debugging purposes?
timotimo the only thing we havee is the debug_name from the STABLE, but that's shared between all objects of the same type
MasterDuke Yeah, that's just giving me NPQArray or BOOTIntArray 14:11
Geth MoarVM: 238896a50a | (Samantha McVey)++ | build/Makefile.in
Fix errors when running `make realclean

This was caused by it always trying to run `make distclean` in the libatomic_ops directory, even if the Makefile had already been cleaned up and removed. Only try to run `make distclean` in the libatomic_ops directory when the Makefile exists.
14:12
timotimo i'll be AFK for a bit, but i'd appreciate more proofreads on my application: docs.google.com/document/d/102h_Nl...3yfI/edit# - thanks! 14:13
14:13 AlexDaniel joined 14:15 vendethiel- joined 14:22 KDr2__ joined
nine timotimo: improved debug output gives me this interesting bit: gist.github.com/niner/d80444bcad9b...1040d44605 14:22
14:24 cognominal joined
MasterDuke Hm, the MVM_CF_USES_FSA flag on the array seems to be getting unset 14:26
14:27 dogbert2 joined
dogbert2 when running spec/stresstest the following is logged early in the process: Missing test file: t/spec/S32-str/S32-str/CollationTest_NON_IGNORABLE-0.t 14:27
MasterDuke The GC should preserve that flag, right? 14:31
dogbert2 .seen samcv 14:36
yoleaux I saw samcv 11:22Z in #moarvm: <samcv> figured out the issue
samcv i was gonna go to bed 14:37
hi dogbert2
dogbert2 hi, do you see the path error above
t/spec/S32-str/S32-str/
samcv hmm ah yes 14:39
fixing 14:40
not sure how that happened :o
dogbert2 perhaps because it's time to sleep :) 14:41
samcv ok fixed 14:43
good night!
i'm guessing i must have hit some key before saving the file.. heh 14:44
o/ night
dogbert2 night
14:50 Skarsnik joined 14:52 MasterDuke joined
nine The only place where we emit an extend_i32 at all is in QASTCompilerMAST. But then it should show up in the --target=mast output, shouldn't it? 14:52
14:55 bloatable6 joined, coverable6 joined, nativecallable6 joined, releasable6 joined, quotable6 joined, evalable6 joined, bisectable6 joined, committable6 joined, greppable6 joined 14:56 unicodable6 joined, benchable6 joined, statisfiable6 joined, squashable6 joined
jnthn nine: Note that extend_i32 is one of the earliest ops, and often getting those run spuriously turns out to be broken management of cur_op (e.g. mis-incrementing it) 15:21
(So that a regsiter number gets interpreted as as op)
nine jnthn: oh, that would make sense, given that I pass the result type object as first child of the nativecallinvokejit op, but exclude it from being treated like a normal argument. 15:25
jnthn Turns out the thing going on on my street today is actually some yearly street party thing, though there was still nice wine. :) 15:34
Found the grilled sausages too. :) 15:35
15:50 MasterDuke joined
MasterDuke Any idea why 'my int @a; @a.push(12321) for ^10; say +@a' would show that @a does not have _USING_FSA set in vmarray's push()? 15:53
Given that I'm working off of my branch that uses the FSA in vmarray of course 15:55
16:01 zakharyas joined
nine jnthn: LOL it's neither. extend_i32 simply ends up in call_op. You'll never guess why :) 16:08
jnthn: unsigned char call_op = c->op == 0 ? MVM_OP_invoke_v : MVM_OP_ncinvoke_v;
timotimo: ^^^
16:08 MasterDuke joined
nine MVM_OP_ncinvoke_v is 782 16:08
Skarsnik unsigned char x) 16:10
maybe have a type for this? like MVM_OPId
nine I guess back in 2012 op numbers beyond 256 were unimaginable :)
timotimo oh, whoops :)
nine 256 ops ought to be enough for anybody ;) 16:11
16:42 leont joined, domidumont joined 17:28 Skarsnik_ joined 17:33 domidumont joined 17:47 zakharyas joined
AlexDaniel FWIW RT #132083 is kinda blocking, so more eyeballs welcome 18:02
synopsebot6 Link: rt.perl.org/rt3/Public/Bug/Display...?id=132083
18:05 dogbert2 joined 18:13 leont joined 18:39 leedo joined 19:06 zakharyas joined 19:10 zakharyas joined 19:34 zakharyas1 joined 19:35 zakharyas joined 20:31 leont joined 20:42 domidumont joined
jnthn nine: I guess "there won't be any more invoke ops than these" held up as an assumption for quite a lot of years. ;-) 20:50
nine Well in 2012 I was still years away from joining rakudo :) 20:52
jnthn m: my $value = -0x7FFFFFFF - 1; say $value; say -2147483648; say $value == -2147483648;
camelia -2147483648
-2147483648
False
jnthn m: my int $value = -0x7FFFFFFF - 1; say $value; say -2147483648; say $value == -2147483648;
camelia -2147483648
-2147483648
False
jnthn m: use nqp; my int $value = -0x7FFFFFFF - 1; say $value; say -2147483648; say nqp::eq_i($value, -2147483648) 20:53
camelia ===SORRY!===
No registered operation handler for 'eq_i'
jnthn m: use nqp; my int $value = -0x7FFFFFFF - 1; say $value; say -2147483648; say nqp::iseq_i($value, -2147483648)
camelia -2147483648
-2147483648
1
jnthn m: use nqp; my int $value = -0x7FFFFFFF - 1; say $value; say -2147483648; say nqp::iseq_I($value, -2147483648)
camelia -2147483648
This representation (NativeRef) cannot unbox to other types (for type IntLexRef)
in block <unit> at <tmp> line 1

-2147483648
jnthn m: use nqp; my $value = -0x7FFFFFFF - 1; say $value; say -2147483648; say nqp::iseq_I($value, -2147483648)
camelia -2147483648
P6opaque: get_boxed_ref could not unbox for the representation '20' of type Scalar
in block <unit> at <tmp> line 1

-2147483648
jnthn m: use nqp; my $value = -0x7FFFFFFF - 1; say $value; say -2147483648; say nqp::iseq_I(nqp::decont($value), -2147483648) 20:54
camelia -2147483648
-2147483648
0
jnthn m: use nqp; my $value = -0x7FFFFFFF - 1; say $value; say -2147483648; say nqp::iseq_I(nqp::decont($value), nqp::decont($value))
camelia -2147483648
-2147483648
1
timotimo we implement iseq_I as cmp_I and result check 20:55
jnthn m: use nqp; say nqp::iseq_I(-2147483648, -0x7FFFFFFF - 1)
camelia 0
timotimo might be interesting to see what ti thinks
jnthn m: use nqp; say nqp::iseq_i(-2147483648, -0x7FFFFFFF - 1)
camelia 1
jnthn m: use nqp; say nqp::cmp_I(-2147483648, -0x7FFFFFFF - 1)
camelia 1
jnthn m: say (-2147483648).base(16) 20:56
camelia -80000000
jnthn m: use nqp; say nqp::cmp_I(-0x80000000, -0x7FFFFFFF - 1)
camelia 1
jnthn m: use nqp; say nqp::eq_I(-0x80000000, -0x7FFFFFFF - 1)
camelia ===SORRY!===
No registered operation handler for 'eq_I'
jnthn m: use nqp; say nqp::iseq_I(-0x80000000, -0x7FFFFFFF - 1)
camelia 0
jnthn m: use nqp; say nqp::iseq_I(-0x80000000, 0x80000000) 20:57
camelia 0
jnthn m: use nqp; say nqp::iseq_I(-0x80000000, -0x80000000)
camelia 1
jnthn Thing is, I'd expect that substraction to constant-fold...
timotimo it should, yeah 20:58
fwiw, i saw the deserialization read a smallbigint of value 2147483648
i don't know why it's positive rather than negative, though
huh 21:01
sign extension going berserk?
-FFFFFFFF80000000
is what i get when i say its .base(16)
japhb It's wierd to display a base 16 number with the high bit set *and* a negative sign. 21:02
timotimo this one shouldn't have any of the higher bits at all 21:03
21:19 leont joined
timotimo forcing the bigint to do the comparison with breaks 21:25
hm, what was the original test ... 21:26
m: use nqp; say nqp::iseq_I(-0x80000000, -0x7FFFFFFF - 1) - i got this to give 1 21:27
camelia ===SORRY!=== Error while compiling <tmp>
Two terms in a row
at <tmp>:1
------> eq_I(-0x80000000, -0x7FFFFFFF - 1) - i⏏ got this to give 1
expecting any of:
infix
infix stopper
postfix
s…
timotimo whoops :)
found another bit 21:29
Geth MoarVM: 9c5fed708f | (Timo Paulssen)++ | src/math/bigintops.c
store smallint value in 64bit if we negate them later

as we might otherwise overflow.
21:30
21:59 Skarsnik_ joined 22:27 MasterDuke joined
MasterDuke what is this telling me? gist.github.com/MasterDuke17/8e42f...98f9847f10 22:32
timotimo i'd say while trying to allocate malloc stumbled upon an entry in the heap that doesn't make sense 22:33
i.e. something wrote garbage onto parts of its management data?
MasterDuke fwiw, that code causes that failure almost always with moar master HEAD, but takes many many tries to get the same failure with my unified + fsa branch (which now also passes a rakudo spectest) 22:35
timotimo that's promising alreadý 22:36
MasterDuke heh, that's a very fancy 'y'
timotimo oops? 22:37
not sure how i reached the combiner for that
MasterDuke btw, this is where my branch stands now, if you feel inspired to look it over. github.com/MasterDuke17/MoarVM/tre..._and_slots 22:38
but afk for a bit 22:39
timotimo i bet ubsan would have been able to figure this out 22:41
the 32bit negating thingie
jnthn timotimo++ # fixing the bug 23:22
I'm too tired to cut the release right now, alas
.tell AlexDaniel if there are no remaining blockers for release, .tell me and I'll cut the release tomorrow 23:23
yoleaux jnthn: I'll pass your message to AlexDaniel.
AlexDaniel okay, thanks
yoleaux 23:23Z <jnthn> AlexDaniel: if there are no remaining blockers for release, .tell me and I'll cut the release tomorrow
jnthn Oh, you're still about :)
AlexDaniel I'm looking at RT #132030 right now 23:24
synopsebot6 Link: rt.perl.org/rt3/Public/Bug/Display...?id=132030
AlexDaniel it's kinda alright, but I'm seeing some kind of weirdness here
possibly in Test.pm, maybe somewhere else. Not sure yet
timotimo it's obscene how much faster python is at calculating permutations 23:25
AlexDaniel timotimo: how much?
timotimo i wasn't patient enough to let it terminate 23:27
oh, it only takes 35 seconds 23:28
python takes 2.5 seconds 23:29
AlexDaniel timotimo: what if it's a regression? What about throwing some code into benchable?
timotimo yeah, let's ask benchable 23:30
AlexDaniel not the one which takes 35 seconds, but something smaller
timotimo of course
benchable6: releases for permutations(10) { }
benchable6 timotimo, starting to benchmark the 22 given commits
AlexDaniel honestly I got very lazy with these bots 23:31
timotimo not sure what you mean?
AlexDaniel my brain doesn't want to think before I get some results from them
“is this result right or wrong?” – well who cares, let's first see if it was different in the past… 23:32
and if it was, what commit changed it and what's the commit message there…
timotimo right 23:33
when do we get a web interface where the whateverables show what they're currently doing, exactly :)
AlexDaniel ^ see, it's crunching something 23:35
timotimo hmpf
23:35 benchable6 joined
AlexDaniel benchable6: I see you were smart enough to reply when you were offline 23:35
benchable6 AlexDaniel, ¦I: «Cannot find this revision (did you mean “all”?)»
AlexDaniel benchable6: releases for permutations(8) { }
benchable6 AlexDaniel, starting to benchmark the 22 given commits
AlexDaniel benchable really needs some love 23:36
MasterDuke jnthn: sim_stack_push is in 2nd spot on a perf record of stage parse (8.4%). any quick wins possible there?
benchable6 AlexDaniel, benchmarked the given commits, now zooming in on performance differences 23:37
timotimo that's part of spesh
since spesh is running off in its own thread, it's not as performance critical 23:38
MasterDuke oh right, i guess i need to find some one to just record the one thread
timotimo is benchable okay?
MasterDuke s/one/way
AlexDaniel timotimo: the first step would be self-served gists… it actually takes a few seconds to upload stuff
timotimo oh, huh. 23:39
AlexDaniel timotimo: in fact, I think right now it's simply uploading the graph
oh… maybe not
benchable6 AlexDaniel, «hit the total time limit of 240 seconds»
AlexDaniel :|
benchable6: 2015.12,HEAD for permutations(8) { } 23:40
benchable6 AlexDaniel, starting to benchmark the 2 given commits
AlexDaniel, benchmarked the given commits, now zooming in on performance differences
AlexDaniel, gist.github.com/ed59308b3ee4028154...95cbde1bf1 23:42
AlexDaniel hah :D
timotimo yeah, we're the fastest we've ever been 23:43
plus/minus a bit of noise
AlexDaniel \o/ yaaay
;)
samcv what is it testing though? 23:52
just for permutations?
timotimo hopefully the for loop itself isn't a very big overhead 23:53
AlexDaniel benchable6: 2015.12,HEAD for permutations(9) { } # because why not
benchable6 AlexDaniel, starting to benchmark the 2 given commits
AlexDaniel, benchmarked the given commits, now zooming in on performance differences 23:54
AlexDaniel .seen azawawi 23:55
yoleaux I saw azawawi 27 May 2017 12:50Z in #perl6: <azawawi> jnthn: in Graphics::PLplot im aiming on providing Raw (native) and cooked with sugar API :)
benchable6 AlexDaniel, «hit the total time limit of 240 seconds» 23:58
AlexDaniel :(
timotimo :|
c: 2015.12,HEAD my $iter = Rakudo::Iterator.Permutations(8); while $iter.pull-one !=:= IterationEnd { }
committable6 timotimo, gist.github.com/3dac4b3fc9175999bf...0c8fef4aed
timotimo ah, yes
c: 2016.12,HEAD my $iter = Rakudo::Iterator.Permutations(8, 1); while $iter.pull-one !=:= IterationEnd { } 23:59
committable6 timotimo, ¦2016.12: «Could not find symbol '&Iterator'␤ in block <unit> at /tmp/IA0e2t8il2 line 1␤␤Actually thrown at:␤ in block <unit> at /tmp/IA0e2t8il2 line 1␤ «exit code = 1»» ¦HEAD(488ca6f): «»
timotimo i wonder when it started living in that file
c: 2017.04,HEAD my $iter = Rakudo::Iterator.Permutations(8, 1); while $iter.pull-one !=:= IterationEnd { }
committable6 timotimo, ¦2017.04,HEAD(488ca6f): «»
timotimo c: 2017.02,HEAD my $iter = Rakudo::Iterator.Permutations(8, 1); while $iter.pull-one !=:= IterationEnd { }
committable6 timotimo, ¦2017.02,HEAD(488ca6f): «»
timotimo c: 2017.01,HEAD my $iter = Rakudo::Iterator.Permutations(8, 1); while $iter.pull-one !=:= IterationEnd { }
committable6 timotimo, ¦2017.01,HEAD(488ca6f): «»
timotimo benchable6: 2017.01,HEAD my $iter = Rakudo::Iterator.Permutations(8, 1); while $iter.pull-one !=:= IterationEnd { }
benchable6 timotimo, starting to benchmark the 2 given commits
timotimo, benchmarked the given commits, now zooming in on performance differences
timotimo, ¦2017.01: «0.2186» ¦HEAD: «0.1974»