02:11
tokuhirom joined
03:48
tokuhirom joined
04:42
vendethiel joined
05:58
FROGGS[mobile] joined
06:10
FROGGS joined
06:38
Ven joined
06:55
zakharyas joined
07:03
domidumont joined
08:14
Ven joined
08:27
kjs_ joined
09:01
kjs_ joined
|
|||
jnthn | lizmat: yes, they look fine; thanks | 09:33 | |
m: say uniname(0x6E) | 10:07 | ||
camelia | rakudo-moar f3aace: OUTPUT«LATIN SMALL LETTER N» | ||
jnthn | m: say uniname(0x2BC) | ||
camelia | rakudo-moar f3aace: OUTPUT«MODIFIER LETTER APOSTROPHE» | ||
jnthn | m: say chr(0x2BC) | ||
camelia | rakudo-moar f3aace: OUTPUT«ʼ» | ||
jnthn | m: say chr(0x149) | 10:08 | |
camelia | rakudo-moar f3aace: OUTPUT«ʼn» | ||
jnthn | m: say chr(0x1F0); say uniname(0x30C) | 10:10 | |
camelia | rakudo-moar f3aace: OUTPUT«ǰCOMBINING CARON» | ||
jnthn | m: say Uni.new(0x6A, 0x30C).NFC | 10:12 | |
camelia | rakudo-moar f3aace: OUTPUT«NFC:0x<01f0>» | ||
jnthn | m: say Uni.new(0x03B9, 0x0308, 0x0301).NFC | 10:15 | |
camelia | rakudo-moar f3aace: OUTPUT«NFC:0x<0390>» | ||
jnthn | m: say Uni.new(0x03B9, 0x0308, 0x0301).Str | ||
camelia | rakudo-moar f3aace: OUTPUT«ΐ» | ||
10:46
Ven joined
|
|||
dalek | arVM: 12c5262 | jnthn++ | src/strings/normalize. (2 files): Add normalizer API to push many codes to buffer. To ease implementing post-case-change renormalization. |
11:07 | |
arVM: 741cb9c | jnthn++ | src/strings/ops.c: Enforce NFG over growing case folds. |
|||
11:52
brrt joined
|
|||
brrt | good * #moarvm | 11:57 | |
timotimo | heyo brrt | 11:59 | |
brrt | i have established, among other things, that our dear frame at the very least does not return from the JIT code with its entry label NULLed | 12:01 | |
(the EXPR frame, that is) | |||
consequently, it must be NULLed somewhere else | 12:02 | ||
or, I must have made a mistake in my gdb | |||
timotimo | it's a very curious thing to happen in any case! | 12:03 | |
brrt | setting a breakpoint on jit field entry is actually extremely expensive | ||
s/field entry/leaving code/ | 12:04 | ||
timotimo | maybe you can find a conditional you can append to the breakpoint that'll make it fire only when we've reached the right frame? | ||
brrt wonders, nay, is sure that adding a sequence number to JITted frames will make debugging easier | |||
yeah, that's what i do | |||
but it's probably significantly cheaper to create the branch in code and have the breakpoint there | 12:05 | ||
otherwise it breakpoints all the time, has to check the condition, and continue | |||
12:07
Ven joined
12:13
Ven joined
|
|||
jnthn | brrt: One other thing to check: does a deopt happen at any point? | 12:31 | |
(Between the entering of the frame with the inlined lexical and the failed lookup) | |||
Bit of a long shot though as we shoulda found the thing in the uninlined frame... | |||
brrt | not sure jnthn, i'll check that too | 12:32 | |
timotimo | we could just turn deopt off via an env var! /s | ||
brrt | great idea :-P | 12:33 | |
jnthn | Given that deopt stops us going ahead and reading bogus memory...maybe not :P | 12:34 | |
But there *are* deopt logging things | |||
Which could be turned on by env var | |||
brrt | oh, that is probably an excellent idea | 12:36 | |
the dynvar log was also very helpful :-) | 12:37 | ||
timotimo | mhm | ||
brrt | deopt is actually pretty unlikely, since i'd have to explain why the first 200 or so iterations we don't have deopt, and in the last one we do | 12:50 | |
i still suspect that something is compiled underneath the old frame, and that the jit label is reinitialized somehow | 12:53 | ||
timotimo | we don't have to deopt if we're not opted in the first place | 12:56 | |
remember that spesh has multiple candidates per call site | |||
brrt | aye, that is true | 13:06 | |
13:13
Ven joined
13:48
synbot6 joined
13:51
Ven joined
14:52
domidumont joined
14:55
domidumont joined
15:16
Ven joined
15:24
Ven joined
|
|||
flussence | I decided to mess around with callgrind... a full quarter of the CORE.setting compile is spent in MVM_sc_find_object_idx (twice as much as MVM_interp_run!) | 15:48 | |
jnthn | o.O | 15:51 | |
That's...*really* odd, we're meant to be annotating the objects with that index so it's O(1)... | |||
flussence++ | |||
flussence | just ooc, I tried making it iterate over that array in the opposite direction. That shaves a few tenths of a second off most of the compile stages, but doubles the MAST part... | 15:54 | |
timotimo | sort and binary search? | 15:57 | |
16:00
Peter_R joined
|
|||
jnthn | But we should only be searching it as the "fallback" case | 16:01 | |
16:04
Ven joined
|
|||
timotimo | well spotted in any case | 16:05 | |
flussence | oh, MVM_get_idx_in_sc is inlined, so it doesn't show counts for that, but that hardly looks expensive to begin with. | ||
timotimo | is that run time spent in there? could be that it spends a lot of cycles there, but has hardly any cache traffic? | 16:07 | |
flussence | that's exclusive-time in cycles (52 billion out of 211 billion) | ||
good question though, how big *is* that array it's scanning? | 16:08 | ||
timotimo | cachegrind would be able to give you more idata on that, i believe | 16:09 | |
i mean | |||
on how it behaves in relation to the cache | |||
jnthn | flussence: It grows over the setting compile, it reaches over 64,000 items | 16:10 | |
Which is why we're meant to also cache the index on objects, but apparently that's not working as it should | |||
flussence | 64k sounds like it should fit into my CPU, but I'll re-run with --cache-sim=yes anyway. Might take a while... | 16:11 | |
jnthn | We still shouldn't be scanning it though | 16:12 | |
timotimo | i *think* --cache-sim=yes only has to simulate the L3 cache - or something like that? | 16:13 | |
16:26
tokuhirom joined
17:10
FROGGS[mobile] joined
17:22
leont joined
17:28
cygx joined
|
|||
cygx | o/ | 17:28 | |
nwc10 | \o | ||
timotimo | sup cygx :) | 17:30 | |
cygx | Well, I looked at what I did back in February to see if there's anything that might be useful to push upstream | 17:31 | |
the JVM open modes have already been merged | |||
I've 2 other branches of more questionable usefullness | |||
github.com/MoarVM/MoarVM/compare/m...rtualfiles and github.com/MoarVM/MoarVM/compare/m...x:embedapi | |||
the former allows to register virtual bytecode files, which is how I created a single-file NQP executable, embedding the .moarvm files | 17:32 | ||
the latter is a vtable-based API, useful eg for a MoarVM plugin | 17:33 | ||
17:42
FROGGS joined
|
|||
flussence | that run with --cache-sim *finally* finished... and it shows pretty much nothing in terms of misses. /me shrugs | 17:45 | |
timotimo | oh | ||
no misses! that's perfect! ;) | |||
flussence | well, not zero, but around 0-5%... | 17:46 | |
timotimo | that's surprisingly good | 17:47 | |
i mean, the whole program's gotta go into cache via memory at least once | |||
well, all the parts we run anyway | |||
flussence | for all the time MVM_sc_find_object_idx spends, only 2% of that is cache misses, 20% is cache hits, and I guess the remainder is it looping over that list | 17:49 | |
FROGGS | jnthn: about serialization: gist.github.com/FROGGS/cf2a24d89361e760e7bc | 17:52 | |
18:20
dalek joined
18:21
FROGGS[mobile] joined
18:25
vendethiel joined
18:48
dalek joined
|
|||
dalek | arVM: 3b09c21 | jnthn++ | tools/ucd2c.pl: Add SpecialCasing to Unicode DB generation script. |
19:20 | |
arVM: 0981b5e | jnthn++ | src/strings/unicode_ (2 files): Update Unicode database with SpecialCasing. |
|||
arVM: eea3ed8 | jnthn++ | src/strings/unicode_ops.c: First pass at handling special casings. Covers most of the cases, though some further work will be needed to properly handle these in combination with synthetic codepoints. |
19:26 | ||
leont | o/ | ||
FROGGS | hi leont | ||
jnthn | The synthetics aside, there's only that darned final sigma greek thing to deal with | 19:27 | |
timotimo | is the "final sigma" the only letter in greek that does that? | 19:31 | |
jnthn | Yeah, but it *seems* that to implement it you have to look ahead one char to see if it's the "end of the word" | ||
jnthn is struggling to find a rigourous definition of what that means | |||
timotimo | ugh. and that's always unhappy when we're not sure if any more data is going to come in | ||
jnthn | Well, this is for uc/tc/lc etc. so we'll just have to go on the string you give us | 19:32 | |
omg, it seems you maybe have to look behind also | 19:37 | ||
timotimo | urgh | 19:39 | |
but why | |||
jnthn | Because the rule only applies if it's the final letter in the word, but not the only letter in the word | 19:40 | |
timotimo | but wait ... this is only about changing case on a string we already have, right? | ||
jnthn | knight666.com/blog/the-curious-case...nal-sigma/ is helpful | ||
Right | |||
It's not a probably to implement the lookaround | |||
timotimo | OK, so not necessarily a problem with regards to data coming through a tcp connection or something | ||
jnthn | Just want to get it right | ||
timotimo | it's also a plus if we don't take a performance hit for every single string we case-change just because there could be a sigma somewhere | 19:41 | |
jnthn | Aha. That uses the GeneralCategory of Letter. | ||
And then start/end of string bound checks | |||
And I was thinking \w and then the latter, but Letter is righter | 19:42 | ||
timotimo: I'll later special-case ASCII to avoid the property lookups completely | |||
Anyway, think I did enough for today, but will deal with final sigma and some tests tomorrow :) | 19:44 | ||
timotimo | \o/ | 19:52 | |
food is done! | 19:54 | ||
[Coke] | jnthn++ | 20:00 | |
lizmat | jnthn++ indeed :-) | 20:03 | |
20:23
cygx left
20:28
tokuhirom joined
21:30
LLamaRider joined
22:24
_itz_ joined
23:19
tokuhirom joined
|