|
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
|
|||