00:42 synopsebot6 joined 01:07 lizmat joined 01:25 geekosaur joined, vendethiel joined 02:48 ilbot3 joined 04:05 vendethiel joined 05:14 vendethiel joined 05:20 synopsebot6 joined 05:23 synopsebot6 joined 06:32 vendethiel joined 07:00 domidumont joined 07:05 domidumont joined 07:55 TimToady joined 08:22 FROGGS joined
FROGGS nwc10: hi, do you have any insights about this one? github.com/MoarVM/MoarVM/issues/34...-199805720 08:23
jnthn: can we alter the expression in the string here? github.com/MoarVM/MoarVM/blob/mast...oots.c#L31 08:28
because it warns like:
src/gc/roots.c: In function ‘MVM_gc_root_add_permanent’:
src/gc/roots.c:31:51: warning: trigraph ??> ignored, use -trigraphs to enable [-Wtrigraphs]
08:33 zakharyas joined 08:35 zakharyas joined 09:13 vendethiel joined
jnthn moarning o/ 10:01
lol trigraphs!
10:04 vendethiel joined
FROGGS *g* 10:05
such a strange thing
jnthn: can we alter that string? or what meaning has <??> there? 10:06
dalek arVM: e5702e0 | jnthn++ | src/gc/roots.c:
Escape ?s to avoid accidentally trigraphing.
10:07
jnthn FROGGS: TIL C lets you escape ? because of the trigraphs thing :)
moritz trigraphs are C's Texas operators, right?
jnthn Yeah. I think from the "keep Austin weird" part of Texas. :P 10:08
moritz wonders if staying in Texas' capital for too long can give you Austism
10:10 mojca joined
nwc10 FROGGS: as to that compiler going SEGV - er, I don't know better than "it's gcc going SEGV - that's a gcc bug" 10:11
to *try* to work round it, one usually tries changing the compiler flags (eg dropping the optimiser)
jnthn That whole ticket is really odd 10:12
nwc10 assuming that it's a debian gcc (as in raspbrian) possibly better to report the bug (with pre-processed source code) to debian rather than direct to the gcc folks
I'm in the UK
(most) hardware is in Vienna
so I can't try to replicate it
"this week"
10:39 zakharyas joined 12:11 colomon joined
timotimo my particles "benchmark" actually spends 4.16% of its time inside floor, which isn't jitted because we don't have floor_n 12:28
postcircumfix:<[ ]> (both the ASSIGN-POS and the AT-POS versions) aren't jitted either, but that's because of param_rp_o 12:30
i don't really understand what's going on there, as AT-POS is only 2.38% and ASSIGN-POS is only 1.02%, but the corresponding postcircumfixes are 17.15% and 10.02% 12:31
all it does is directly invoke that method
and those methods are even jitted
lizmat timotimo: I think it's because AT-POS is one of a list of candidates with named parameters ? 12:32
timotimo well, the actual candidates are pointed out in the profile 12:33
so i thought it's already using those exact candidates
lizmat example ?
timotimo you mean the code i'm talking about?
or the profile file? 12:34
lizmat the actual candidate that you see taking 17% ?
timotimo it's postcircumfix:<[ ]>( \SELF, int $pos) is raw { SELF.AT-POS($pos) } 12:35
lizmat perhaps the \SELF ?
timotimo it has 4,867,763 invocations and takes 3416.02ms all in all (but 2998.79ms without what the AT-POS takes)
lizmat is this in an array ? 12:37
timotimo well, the param_rp_o is the one that extracts the SELF
lizmat or a List ?
timotimo it's a native num array 12:38
there's also some accesses to a native num CArray
lizmat ah, native num
are you sure it actually hits the multi method AT-POS(numarray:D: int $idx) is raw { 12:39
?
timotimo let's see 12:40
lizmat also, I'm wondering whether it is the :D on the numarray, that may be the reason ?
timotimo i can try compiling without the :D
it does hit that exact candidate
but as i said, the AT-POS itself is jitted and only takes a tiny amount of time itself 12:43
doesn't seem to make a difference at all 12:47
removing the :D
i really don't know what you use in assembly to turn a double into an int 12:54
lizmat neither 12:55
the days that I could hand-code 8086 assembly are long gone 12:56
timotimo i'm just betting on brrt reading the log and building what i need :D
it'll only be a tiny win, though :(
i'm surprised the floor method doesn't get completely inlined
:\ 12:58
floor is implemented like this:
unbox the num to check "isnanorinf"
unbox the num, floor it to a floored num
coerce the floored num to a big integer
to be fair, there's no reason i'm giving the compiler or runtime to know i'm only dealing with non-big integers 12:59
sorry, not "to a floored num" 13:01
and the next step after the floor is going to be to unbox again :| 13:09
13:18 vendethiel joined
dalek arVM: df13f01 | jnthn++ | src/io/sync (2 files):
Mark thread blocked for GC when doing sync reads.

Otherwise, one thread blocked on I/O can cause all other threads to block when they need to do their next GC run until the read returns.
13:18
Heuristic branch merge: pushed 91 commits to MoarVM/even-moar-jit by bdw 13:37
13:39 brrt joined
brrt \o 13:39
timotimo: whaddayaneed 13:40
:-P
timotimo floor_n and probably also ceil_n?
brrt oh, right
timotimo though i have no clue how good that'll be for my code
it'll only lift a routine from spesh'd to jitted, and that routine only accounts for a small part of my run time anyway 13:41
like, a really small part
brrt the 'coerce double to int' is 'cvttsd2si'
timotimo oh, i could have guessed that 13:42
hm. but how do we handle really big doubles here?
oh, we have fromnum_I 13:43
right, so floor_n actually does coerce num to num
brrt aye 13:44
not sure what 'tsd' stands for 13:45
timotimo "thousand"
brrt pretty sure the 'd' is for double :-)
timotimo oh, floor wouldn't get jitted, because we lack jitting for coerce_nI anyway
brrt convert with truncation scalar dobule-pression floating point value to signed doubleword integer 13:46
13:46 vendethiel joined, dalek joined
brrt which becomes a signed quadword if used on quadword operands 13:48
so
(what's coerce_nI?) 13:49
annoying, is what it is
timotimo it can be turned into a jit-friendly op like the other big int ops already have been 13:50
brrt i'd assume so, yes 13:53
timotimo well, i know it can
because i'm doing it right now
just replaced MVMObject *result with result_type and return the result
brrt at some point in the indefinete future, we should start seeing all the function calls as performance drains, in the JIT, at least
timotimo so if you want you can already write the support code fro that :)
brrt :-)
timotimo yeah
brrt (don't write a JIT for a highly dynamic language, then, brrt) 13:54
timotimo heh.
dalek arVM: 29997a1 | timotimo++ | src/ (3 files):
make MVM_bigint_from_num jit-friendly
13:57
timotimo adding the coerce_nI to the graph.c was easy, but we're still lacking the floor_n and ceil_n in the jit :) 14:00
so i can't test it easily
and i have no clue if the nqp test suite tests coerce_nI at all 14:02
brrt now, wait a minut 14:03
we're talking about coerce_nI right?
coerce_In is already jitted, but it is not using the xmm0 return address for its value 14:04
oh, nm, it is alright
timotimo sorry, yeah, num to Int
brrt :-) 14:06
dalek arVM: 651b6c1 | timotimo++ | src/jit/graph.c:
jit coerce_nI as a call to bigint_from_num
brrt you're just seconds before me
but, no, sorry 14:07
that's wrong
coerce_nI has 3 arguments, second is type, third is num
(competitive speed coding :-o) 14:09
competitive collabarative speed coding
14:10 cognominal joined, BinGOs joined
brrt very net reliability 14:11
14:18 mst joined
dalek arVM: b16fdca | brrt++ | src/jit/graph.c:
MVM_bigint_from_num takes a type argument
14:18
14:22 timotimo joined 14:25 zakharyas joined 14:29 travis-ci joined
travis-ci MoarVM build failed. Bart Wiegmans 'MVM_bigint_from_num takes a type argument' 14:29
travis-ci.org/MoarVM/MoarVM/builds/117978123 github.com/MoarVM/MoarVM/compare/6...6fdca7e50e
14:29 travis-ci left
timotimo .. uh oh? 14:29
damn, yeah 14:30
i totally wronged that implementation
brrt wait, what 14:31
broken build?
timotimo well, you fixed it
brrt not sure i did
(i only noticed becuase i spent some time on making the same mistake though :-))
yep, it's broken
timotimo ah, syntax error 14:32
missing a }
brrt yep 14:33
dalek arVM: 82535c3 | brrt++ | src/jit/graph.c:
Typo fix!
brrt sorry about that :-)
timotimo clearly the nqp test suite didn't test coerce_nI :) 14:34
brrt well, i dunno. i often get weird things where i though i thought i built something and then apparantly didn't build it 14:35
not enough attention being paid, clearly
dalek arVM: 0e285c8 | jnthn++ | src/ (4 files):
Fix missing inclusion of frames in heap snapshots.
14:40
14:46 travis-ci joined
travis-ci MoarVM build passed. Bart Wiegmans 'Typo fix!' 14:47
travis-ci.org/MoarVM/MoarVM/builds/117984759 github.com/MoarVM/MoarVM/compare/b...535c304507
14:47 travis-ci left 14:58 travis-ci joined
travis-ci MoarVM build passed. jnthn 'Fix missing inclusion of frames in heap snapshots.' 14:58
travis-ci.org/MoarVM/MoarVM/builds/117986633 github.com/MoarVM/MoarVM/compare/8...285c839525
14:58 travis-ci left 15:14 brrt joined 15:39 lucasb joined 16:03 brrt joined 16:07 zakharyas joined
jnthn heh, these snapshots would be a lot more useful if NQP set debug type names :) 16:09
16:12 brrt joined
dalek arVM: fcad1c5 | jnthn++ | src/6model/bootstrap.c:
Set debug_name in a few more places.

So we get better output in the heap snapshot viewer.
16:36
FROGGS jnthn: is there a screenshot available that shows how that snapshot viewer looks like? 16:37
jnthn not yet :) 16:39
Will share some more stuff on it soon 16:40
16:45 ggoebel16 joined
dalek arVM: 7425902 | jnthn++ | src/profiler/heapsnapshot.c:
Factor more allocations into frame size.
16:50
17:05 vendethiel joined
dalek arVM: d663972 | jnthn++ | src/6model/ (44 files):
Add REPR API for getting unmanaged size.

That is, the amount of memory a REPR has behind it that is not under the direct management of the GC.
17:14
arVM: a6fa12b | jnthn++ | src/profiler/heapsnapshot.c:
Factor in unmanaged size to heap snapshot.

Though nothing is actually implementing the API yet.
arVM: 4e1817e | jnthn++ | src/6model/reprs/MVMArray.c:
Implement unmanaged_size for VMArray REPR.
17:15
arVM: b0482df | jnthn++ | src/6model/reprs/MVMArray.c:
Add a missing `static`.
17:24
arVM: 19ccc86 | jnthn++ | src/6model/reprs/MVMString.c:
Implement unmanaged_size for VMString REPR.
arVM: df9f8b8 | jnthn++ | src/6model/reprs/NFA.c:
Implement unmanaged_size for NFA REPR.
17:36
17:59 domidumont joined 18:05 pochi joined
dalek arVM: 30bad8d | jnthn++ | src/profiler/heapsnapshot.c:
Fix use-after-realloc bug in heap snapshot taking.
18:06
jnthn Here's a session with the heap analyzer so far, on a Rakudo heap snapshot: gist.github.com/jnthn/35fb78323d715dda93fc 18:08
The numbers are still underestimates in places, because unmanaged_size needs implementing on some more REPRs 18:10
The analysis app itself is here: github.com/jnthn/p6-app-moarvm-heapanalyzer 18:11
dinner break now :) 18:17
moritz what's the moarop_mapper? 18:28
jnthn github.com/perl6/nqp/blob/master/s...T.nqp#L331 18:50
diakopter yeah that's on me 18:51
I was thinking: .oO( surely we won't ever have a thousand of these ) 18:52
we could have it return an array of pre-processed args instead of a curried code object, maybe it'd be smaller 18:54
I mean. I think that was me.
18:55 ilmari joined
diakopter 74,000 NQPArrays with average size around 100 bytes 18:56
18:56 mojca joined
diakopter seems small 18:56
32 bytes per bootint; seems high 18:57
I guess a bunch of pointers for 64-bit memory /o\ 18:58
.oO( surely many of these metaobject pointers could be compressed to use only 8 bits or something
18:59
)
OR, all these counter/index integers could be native ints 19:01
19:15 camelia joined 19:19 retupmoca joined 19:20 arnsholt joined, dalek joined 19:52 FROGGS joined 20:33 colomon joined
dalek arVM: 8d6e8ed | timotimo++ | src/6model/reprs/P6bigint.c:
unmanaged_size for P6bigint (if it IS_BIG)
21:17
21:38 colomon joined 21:43 geekosaur joined 21:46 zakharyas joined
dalek arVM: 0d25193 | jnthn++ | src/profiler/heapsnapshot.c:
Fix regression in emitting references.
21:56
timotimo jnthn: anything good we can do for/with gen2-roots? 21:58
jnthn timotimo: Yeah, I need to include those still, I think 22:03
Will get there
In the meantime, something awesome
I just added a couple of new features to the heap snapshot analyzer 22:04
And...it just explained our EVAL leak!
timotimo well, the gen2 roots are just things in the gen2 that point at the nursery, right?
so we'll end up seeing them from a full collection anyway
i just mean we might want to analyze them individually (well, as a set of roots, really)
jnthn timotimo: We should include them in so far as they tell us about some things that are *only* alive because we didn't do a full collection yet 22:05
But I want to think about that a little more :)
This is awesome
gist.github.com/jnthn/f67379ff234861729f34
timotimo well, really we want to have some stats like "this root holds X things in total, Y of those are only reachable by this root" 22:06
oh, we hold a list of all SCs we are compiling and we're not dropping those references?
jnthn We're meant to pop SCs from that when we're done compiling them, yes. :)
Apparently we don't 22:07
I...would not have guessed that :)
timotimo right. it's something we already do, but apparently we do wrong
so, very well done :)
jnthn 'night, #moarvm 22:38
22:43 vendethiel joined 23:41 geekosaur joined