Welcome to the main channel on the development of MoarVM, a virtual machine for NQP and Rakudo (moarvm.org). This channel is being logged for historical purposes. Set by lizmat on 24 May 2021. |
|||
00:02
reportable6 left
00:18
dogbert17 joined
00:19
dogbert11 joined
00:23
dogbert17 left
00:31
dogbert11 left
|
|||
timo | i went through rakudo's dispatchers and replaced a bunch of drop + insert combinations and now gen/moar/CORE.d.setting compilation explodes with a segfault | 00:47 | |
00:50
dogbert11 joined
|
|||
timo | changed capture-lex back, after that capture-lex-caller explodes :) | 00:52 | |
oh, i wonder if perhaps i got the callsite flag types mixed up. there's no check to explode early for that. that could perhaps be it | 00:54 | ||
00:55
dogbert17 joined
00:59
dogbert11 left
|
|||
timo | even raku tests are fine. now for spec tests | 01:01 | |
01:02
CaCode_ joined
|
|||
timo | m: say 7017 * 100 / 8665 | 01:02 | |
camelia | 80.980958 | ||
timo | getting just above a 20% win would have been nice compared to just below 20%, but i'll take it | 01:03 | |
01:04
reportable6 joined
01:05
CaCode- left
|
|||
timo | why am i now seeing profile files with >10k allocations of BOOTCapture | 01:24 | |
gist.github.com/timo/5edae0b9f0fc4...425ca59986 welp | 01:25 | ||
02:09
dogbert17 left
02:28
dogbert17 joined
03:01
CaCode_ left
04:50
reportable6 left,
notable6 left,
quotable6 left,
unicodable6 left,
bloatable6 left,
statisfiable6 left,
greppable6 left,
committable6 left,
bisectable6 left,
benchable6 left,
squashable6 left,
releasable6 left,
linkable6 left,
coverable6 left,
shareable6 left,
evalable6 left,
tellable6 left,
sourceable6 left,
nativecallable6 left,
reportable6 joined,
quotable6 joined
04:51
benchable6 joined,
tellable6 joined,
notable6 joined,
committable6 joined,
linkable6 joined
04:52
shareable6 joined,
squashable6 joined,
unicodable6 joined
04:53
bloatable6 joined
05:08
frost left
05:32
SmokeMachine left,
SmokeMachine joined
05:52
statisfiable6 joined,
nativecallable6 joined
05:55
[Coke] left
05:57
dogbert11 joined
05:59
dogbert12 joined
06:00
dogbert17 left
06:02
reportable6 left
06:03
reportable6 joined,
dogbert11 left
06:04
dogbert17 joined,
dogbert12 left
06:08
Kaiepi left
06:51
greppable6 joined,
bisectable6 joined,
dogbert17 left
06:52
sourceable6 joined
07:08
Kaiepi joined
07:30
dogbert17 joined
07:33
dogbert11 joined
07:34
dogbert17 left
08:05
dogbert17 joined
08:06
dogbert11 left
08:13
dogbert11 joined
08:15
dogbert17 left
08:24
dogbert17 joined
08:28
dogbert11 left
08:50
coverable6 joined
|
|||
timo | at least part of the problem is indeed that i've been replacing arguments with a different kind, which the new syscall is explicitly meant not to support | 09:20 | |
09:21
frost joined
|
|||
nine | Could it support this? | 09:41 | |
timo | it could, yeah. i'm already cloning the callsite so that memory management doesn't go wrong, so could as well build a new one with a tweaked flag there | 09:42 | |
09:53
evalable6 joined
|
|||
nine | I do the same here: github.com/MoarVM/MoarVM/blob/new-...sp.c#L1226 | 09:54 | |
timo | you'll be able to steal my helper, then, and save one FSA allocation | 10:09 | |
hey, does that currently leak callsite allocations? | 10:10 | ||
i think it does | 10:17 | ||
11:25
evalable6 left,
linkable6 left,
frost left
11:26
evalable6 joined
11:27
frost joined,
linkable6 joined
|
|||
nine | indeed! | 11:28 | |
timo | this won't make that much of an impact i'm sure. good to plug that leak tho. and of course we'll have a function that replaces a capture's flag at an offset | 11:35 | |
actually, i'm accessing the callsite's flags directly here. naughty naughty. | 11:36 | ||
oh, yes, that would be very bad if it turned out to be interned | |||
nine | That's what I did at first as well. And it led to "interesting" errors | 11:37 | |
11:38
[Coke] joined
|
|||
timo | when can we become a hivemind so we can share all knowledge of interesting error scenarios instantaneously | 11:40 | |
nine | Btw. did you notice that the comments above the callsite manipulation functions promise interning but the functions actually don't do that? | 11:41 | |
timo | that's rude | 11:48 | |
11:50
releasable6 joined
12:02
reportable6 left
12:03
reportable6 joined
|
|||
timo | from my experiments it looks like interning is relatively performant actually | 12:21 | |
at least last time i tried i could not outperform it with my little cache for callsite mutation operations | 12:22 | ||
then again, locking for interning was different back then | 12:25 | ||
12:32
dogbert11 joined
12:35
dogbert17 left
|
|||
timo | hm, not sure what it was like compared to changing nothing. was i making it do a lot more than before? bottlenecking it? | 12:37 | |
13:48
Kaiepi left
14:13
dogbert17 joined
14:16
dogbert11 left
|
|||
nine | eq_I r26(1), r2(2), r23(1) # [063] start of exprjit tree | 14:25 | |
set r17(4), r26(1) # [064] start of exprjit tree | |||
unless_i r17(4), BB(15) # [065] start of exprjit tree | |||
Success! | |||
timo | *nice*, but how? | 14:28 | |
if this hits a ot of the boolifies we have, i imagine that would make a whole lot of workloads faster | 14:33 | ||
Geth | MoarVM/new-disp-nativecall: e2f7edce74 | (Stefan Seifert)++ | 3 files Eliminate hllbool/boot-boolify-boxed-int pairs in spesh No need to turn an int into an HLL bool just to turn it back to an int when using it as a condition for jumps. Eliminate those pairs same as we do with box/unbox. |
14:36 | |
timo | ah, that's how | 14:38 | |
nine | box/unbox pair elimination was a great template | 14:39 | |
timo | hey, if you ever want to check escape analysis out, we're building empty hashes for argument spesh for named arguments and can't toss them out yet because of deopt usages and escape analysis could use the materialization mechanism to fix this | 14:42 | |
nine | Isn't that part of jnthnwrthngtn++'s next grant? | 14:43 | |
timo | in theory yes | 14:45 | |
but you know how we all appreciate improving bus factors %) | 14:46 | ||
14:46
frost left
|
|||
timo | there's something under the keys in my keyboard and i can't seem to get it out, jst move it between different keys by blowing between the keys | 14:46 | |
i an't pll off the keyaps either bease the last two times a key ame off the mehanism i old not get it bak | 14:47 | ||
ccccccuuuuuuuu | |||
14:48
frost joined
|
|||
[Coke] | need some mini vacuum | 14:48 | |
nine | timo: I've found turning over the keyboard, shaking and leting gravity do its job gets a disgusting amount of dirt our of keyboards... | 14:49 | |
much more so than vacuums or blowing | |||
timo | i got a tiny amount out. this is kind of sort of a chiclet keyboard, which is what i blame for the trouble: barely any distance between keycaps | 14:50 | |
huh, it helped more than i would have imagined. very nice! | 14:52 | ||
14:53
CaCode joined
|
|||
timo | i need to actually sit down and really work on my split keyboard's firmware / keymap | 14:53 | |
[Coke] | I am looking forward to my keyboardio 100 once they are made. | 14:56 | |
timo | i've posted pictures of my keyboard here, right? | 14:58 | |
MasterDuke | nine: just curious, but does that last commit need to be in new-disp-nativecall? | 16:39 | |
nine | no | 16:40 | |
I only pushed it to new-disp-nativecall because that was the quickest way to get it into geth ans an answer to timo's how question :) | 16:41 | ||
MasterDuke | ha | 16:51 | |
Geth | MoarVM/optimize_hllbool_boolify_pairs: 4a2e0aa678 | (Stefan Seifert)++ | 3 files Eliminate hllbool/boot-boolify-boxed-int pairs in spesh No need to turn an int into an HLL bool just to turn it back to an int when using it as a condition for jumps. Eliminate those pairs same as we do with box/unbox. |
16:56 | |
MoarVM: niner++ created pull request #1586: Eliminate hllbool/boot-boolify-boxed-int pairs in spesh |
|||
17:05
leont_ joined
|
|||
timo | have you any measurements? | 17:08 | |
17:13
leont left,
leont_ is now known as leont
|
|||
nine | It may have shaved off 1 % of csv-ip5xs but fluctuations are too high to draw conclusions | 17:23 | |
Current record is at 7.654s | 17:24 | ||
timo | ah, too bad | 17:27 | |
nine | It's clearly faster. Just how much I can't say | 17:29 | |
17:34
Kaiepi joined
|
|||
timo | there wouldn't be much reduction in allocation either, right? | 17:37 | |
nine | Not due to hllbool as that just returns those global objects | 17:38 | |
timo | right, that's fair | ||
it's still got to be faster than runcfunc, or is runcfunc just good? | |||
nine | 7.520s by assuming that Inline::Language::ObjectKeeper's keep will usually find a free slot in the keeper array and rarely has to extend it. This means that I can push $objects.push($value); $objects.elems - 1 into a separate method and call that. This in turn gets the bytecode size below the inlining limit | 17:39 | |
I'm pretty sure the latter wouldn't be true with hllbool/boot-boolify-boxed-int still in place | 17:40 | ||
Well the elimination simply removes several ops without adding any. So no matter how good runcfunc is, we'll end up being faster | |||
timo | we'll want not only to have jit based on repr for reprops, we'll also have interest in runcfunc being specialized into expr trees | 17:42 | |
not sure how far that's off in terms of worthwhile work | |||
18:02
reportable6 left
18:04
reportable6 joined
18:47
sena_kun left
18:48
sena_kun joined
19:42
CaCode_ joined
19:43
CaCode_ left
19:44
CaCode left
|
|||
lizmat | I have a slightly worrying message | 19:47 | |
nine | lizmat: I'd prefer a happy one ;) | 19:48 | |
lizmat | I have some code that reads about 7000 JSON files | ||
one field in the resulting hash, should be the same as the filename (minus .json) | 19:49 | ||
if I read this in serially, no problem | |||
if I read this with .race, then 1 in about 7000 times the field is from *another* hash | |||
I mean... 1 time it gets a hash from JSON::Fast that has (at least) one key/value fro another hash | 19:50 | ||
lemme see if I can golf this | 19:52 | ||
Geth | MoarVM: MasterDuke17++ created pull request #1587: Negative numbers should not be prime |
19:54 | |
nine | Good thing I'm so tired. Managed to stop reading up on negative primes after just a few minutes | 20:02 | |
lizmat | ok, cannot reproduce it in a clean script | 20:15 | |
Geth | MoarVM: 1bd61725d3 | (Daniel Green)++ | src/math/bigintops.c Negative numbers should not be prime The code from the paper just worked with unsigned values and I didn't notice. |
20:24 | |
MoarVM: 9bb1aebcb3 | MasterDuke17++ (committed using GitHub Web editor) | src/math/bigintops.c Merge pull request #1587 from MasterDuke17/negative_numbers_should_not_be_prime |
|||
lizmat | it looks like Str.match is not threadsafe | 20:28 | |
at least something like: | |||
$path.match(/ ':auth<' <( <-[>]>+ )> /) | |||
github.com/rakudo/rakudo/issues/4601 | 20:53 | ||
lizmat is not happy she found this, but will be very happy when the cause of this is found | 21:04 | ||
21:19
evalable6 left,
linkable6 left
21:20
evalable6 joined
|
|||
ugexe | some auths contain < and > | 21:38 | |
*besides the point* | 21:39 | ||
22:22
linkable6 joined
|
|||
timo | lizmat: giving the pointy block its own $/ fixes it, can you confirm? | 22:27 | |
the discrepancy may come from $/'s .orig attribute being set to a different thread's target string, thus causing the wrong result to come out of the match? | 22:28 | ||
22:45
squashable6 left
22:47
squashable6 joined
|
|||
lizmat | timo: indeed, a `my $/` inside the scope of the map fixes it | 22:49 | |
timo | i wonder if it races in a way that makes the stringification of $match change even more afterwards | ||
lizmat | so basically, the standard $/ is shared between threads ? | 22:50 | |
wonder if that also applies to $_ then | |||
timo | do we set the target/orig of the $/ before we try matching against it? | ||
it could be we're just getting the $/ from one level further outside | |||
lizmat | bur then we'd be getting garbage, no | ||
? | |||
timo | don't think so, since we also grab the match result afterwards? | 22:51 | |
i guess you can add a little `start { "trololo".match(/lol/) for ^100_000 }` in there as well and see if that bleeds through | 22:52 | ||
but start may have different handling than just giving a pointy block to .map | |||
lizmat | well, afaik, .race just calls a lot of starts? | ||
timo | sure, i'm just worried more about the lexical stacking of the block with the mainline code, i.e. what its OUTER:: is | 22:53 | |
the much simpler test i just did is add `say $/` after the race and see that it does contain a result | |||
when there's a `my $/` inside the block, `say $/` after the race comes out Nil, otherwise it has a word in it | 22:54 | ||
(zygotaxis) | |||
more about the point before that: the compilation of the pointy block may be different actually from the compilation of a start block, because we also do something to capture dynamic variables and such at the point of the start | 22:55 | ||
but in that case you could just have put a `my &do-the-thing = -> { ... }; start { do-the-thing() }` instead to work around that | 22:56 | ||
lizmat | interesting... | ||
so maybe the nqp::getlexref('$/') is finding the outer $/? | |||
ok, this also happens before my removal of the special getlexref handling of the .match proto | 23:00 | ||
timo | looks like MoarVM::Remote needs a little bit of adaptation for newer versions of moarvm | ||
just the tests i think | 23:01 | ||
japhb | Gah ... I'm having trouble optimizing a module I just wrote because the runtime for repeated runs of a single benchmark can vary by a factor of 2x. MVM_SPESH_BLOCKING=1 MVM_SPESH_NODELAY=1 drops the variance down to less than 5% ... *except* then it's always the slower time range. GAH. | 23:02 | |
And the problem is the whole thing is a giant state machine made of a great many closures. So ... fun figuring out what's changing. :-( | 23:03 | ||
MasterDuke | MVM_SPESH_NODELAY=1 isn't really good for optimizing though, because it will cause moarvm to make bad choices | 23:06 | |
japhb | You're suggesting blocking only? | 23:07 | |
MasterDuke | yeah | ||
japhb gives it a try | |||
timo | looking at the stack trace in moar-remote with "all lex" tells me that the frame with the -> $string literally doesn't have a $/ of its own | ||
MasterDuke | could also try disabling hash randomization | ||
lizmat | m: for ^10 { $/++ }; say $/ # this feels wrong | ||
camelia | 10 | ||
lizmat | timo: right, I guess the inner $/ is optimized away | 23:08 | |
timo | bisectable6: for ^10 { $/++ }; say $/ | 23:09 | |
bisectable6 | timo, Will bisect the whole range automagically because no endpoints were provided, hang tight | ||
japhb | MasterDuke: Oh that is SO much better. MVM_SPESH_BLOCKING=1 brings the time range down to 3%. Not the fastest run I'd seen with no env vars, but much closer to the fast end than the slow one. I can work with this, I think. | 23:10 | |
timo | oh, you already did it in the other channel | ||
bisectable6 | timo, ¦6c (59 commits): «10» | ||
timo, Nothing to bisect! | |||
japhb | You know, I think one of you had even told me about the NODELAY "bad choices" problem, and it had just slipped my mind. | 23:11 | |
lizmat | seems to have been like this forever ?? | ||
japhb | Anyway, thank you MasterDuke++ | ||
MasterDuke | np | ||
timo | i feel like i did that | ||
but it's also a thing jonathan pointed out in the last conference talk | |||
japhb | Well then timo++ and jnthnwrthngtn++ too. :-) | 23:12 | |
lizmat | $/ ? | ||
japhb | I'm just really slow sometimes, I suppose. ;-) | ||
timo | the thing japhb said | ||
lizmat | ah, ok | 23:13 | |
m: for ^10 { $/++ }; say $/ # so is this behaviour expected ? | |||
camelia | 10 | ||
lizmat | m: $/++ for ^10; say $/ # I'd expect it from this | 23:14 | |
camelia | 10 | ||
lizmat calls it a day | 23:22 | ||
& | |||
timo | of all the things that have been called "a day", this is certainly one | 23:33 |