github.com/moarvm/moarvm | IRC logs at colabti.org/irclogger/irclogger_logs/moarvm Set by AlexDaniel on 12 June 2018. |
|||
timotimo | the profiler now links routines that have a SETTING:: path to github, including the line number | 00:09 | |
MasterDuke | !! nice !! | 00:14 | |
timotimo | MasterDuke: how do you feel about doing a test-ride before i make this Actually Public???? | ||
oh damn it, i thought i made utf8 work properly | |||
timo2timo | üöä | ||
timotimo | nope, only question marks | ||
MasterDuke | heh | 00:18 | |
and sure | |||
timotimo | are you on bitbucket? | ||
MasterDuke | i doubt it | 00:22 | |
timotimo | www.sharedrop.io/rooms/56e33c31-51...5df0b8d0a4 | 00:23 | |
wait, is that you? :P | 00:24 | ||
MasterDuke | i think so, you shared something for about 1s | ||
but i didn't have time to click it | |||
timotimo | OK | ||
i was worried maybe some foreign secret agent wanted to steal the data | 00:25 | ||
MasterDuke | happens all the time | ||
a very reasonable concern | |||
timotimo | git clone -b master /home/me/tmp/file.bundle moarperf | 00:26 | |
<- did not yet know you could actually just clone from a gitbundle | |||
you'll have to "npm run build" (which will set up a change watcher, bu you can just ctrl-c it later) | 00:27 | ||
and then "cro run" | |||
MasterDuke | hm, do i install webpack with npm? | 00:30 | |
timotimo | oh | ||
MasterDuke | or my os package manager? | 00:31 | |
timotimo | does it install all you need when you just "npm install" in the folder? | ||
MasterDuke | seems like | 00:32 | |
timotimo | cool, that should do it, then | ||
oh | 00:33 | ||
everything on the "welcome screen" is doing nothing at all | |||
except the file input and "load file" button | |||
i should probably remove those for the first public release, so people don't get horribly confused when nothing does anything | |||
MasterDuke | hm, where is the 'cro' binary/shell script/whatever? | 00:38 | |
timotimo | snstall all the cro modules | 00:42 | |
except zeromq | |||
also the moarvm heapanalyzer | |||
MasterDuke | man, installing all these dependencies is not a fast process | 00:47 | |
or course i'm also using 2018.06 for this, so i don't have all the recent performance increases | |||
01:02
Kaiepi left,
Kaiepi joined
|
|||
MasterDuke | huh, none of those actually put a 'cro' in my path | 01:02 | |
timotimo | it's not actually necessary to "cro run" it | 01:03 | |
01:03
p6bannerbot sets mode: +v Kaiepi
|
|||
timotimo | you can also set MOARPERF_HOST=localhost MOARPERF_PORT=20000 perl6 service.p6 | 01:03 | |
did you install the "cro" package with lowercase c? | |||
MasterDuke | well, i used what arch linux packages are available | 01:05 | |
timotimo | oh | ||
didn't know about those | |||
MasterDuke | Could not find Routes at line 5 in: | 01:06 | |
timotimo | oh, -I lib | ||
i hope you're not writing because you're enjoying it so much %) | 01:15 | ||
01:24
MetaNova29 joined
|
|||
timotimo | now i'% a little worried | 01:25 | |
01:25
p6bannerbot sets mode: +v MetaNova29
01:29
MetaNova29 left
|
|||
MasterDuke | got distracted | 01:30 | |
timotimo | it really needs a simple way to cut down the size of some of these tables %) | 01:33 | |
01:34
ovrstorm0 joined,
ovrstorm0 left
|
|||
MasterDuke | ugh, DBIish doesn't want to install because NativeHelper::Blob isn't installed | 01:38 | |
and there's no package for it | |||
timotimo | oh, huh? | ||
anyway, i'm going to bed now. if it tells you that "routine with id ??? doesn't seem to exist", just switch to "routines" and click the "get routine overview" button %) | 01:46 | ||
MasterDuke | ok | ||
timotimo | maybe you're lucky and the sqlite dbiish part doesn't actually use NativeHelpers::Blob? | ||
and you can just monkeypatch it out? | |||
:\ | |||
01:47
timo2timo left
02:18
clarjon1 joined,
clarjon1 left
|
|||
MasterDuke | timotimo: ⚠ moarperf Type check failed in binding to parameter '$filename'; expected Str but got Any (Any) | 02:36 | |
fwiw, that was just using `cro run` | 02:37 | ||
02:40
davidfg48 joined,
davidfg48 left
03:25
Roedy17 joined
03:26
p6bannerbot sets mode: +v Roedy17,
Roedy17 left
03:37
lizmat left
03:41
tallguy4 joined
03:42
p6bannerbot sets mode: +v tallguy4,
tallguy4 left
03:44
wook_ joined
03:45
wook_ left
04:22
lizmat joined
04:23
p6bannerbot sets mode: +v lizmat
05:36
Aleszandro joined,
Aleszandro left
05:52
lucy_ joined,
p6bannerbot sets mode: +v lucy_
05:53
lucy_ left
06:26
robertle joined
06:27
p6bannerbot sets mode: +v robertle
06:31
rkta joined,
rkta left
07:02
hexa-9 joined,
hexa-9 left
07:07
metax joined
07:08
p6bannerbot sets mode: +v metax,
metax left
07:16
ProClifo joined,
ProClifo left
07:25
Guest14615 joined,
Guest14615 left
|
|||
timotimo | MasterDuke: | 08:04 | |
-sub routes(HeapAnalyzerWeb $model, ProfilerWeb $profiler, Str $filename?) is export { | |||
+sub routes(HeapAnalyzerWeb $model, ProfilerWeb $profiler, $filename?) is export { | |||
08:18
zakharyas joined
08:19
p6bannerbot sets mode: +v zakharyas
08:47
pokk17 joined
08:48
pokk17 left
09:52
patrickz joined,
p6bannerbot sets mode: +v patrickz
10:05
abraxis joined,
abraxis is now known as Guest39230
10:06
p6bannerbot sets mode: +v Guest39230
10:07
Guest39230 left
|
|||
jnthn | I guess we're about at the point where we need to figure out guards and SSA versioning | 10:22 | |
So that the post-guarded thing has a new version | |||
timotimo | yeah, sounds good to me | 10:23 | |
jnthn | The easiest way is to have all the guard instructions have a w(obj) where they "write" the guarded value (in fact they can do absolutely nothing since it'll be the same real register) | ||
timotimo | i only see two methods of making that work, and i like neither; give the guard ops one write and one read parameter, or handle them just like inc and dec | 10:24 | |
jnthn | Right, like inc/dec is the other way | ||
10:24
perl6nopath joined,
p6bannerbot sets mode: +v perl6nopath
|
|||
jnthn | I don't like either of them too... | 10:24 | |
timotimo | another is to have them act a little bit like PHI nodes, i.e. build fake info structs for all those ops | 10:25 | |
so they only have the extra argument during spesh | |||
jnthn | That feels...icky, but yeah, it's also an option | ||
10:25
perl6nopath left
|
|||
timotimo | that way we'd at least not have to duplicate the ops in the oplist to have both one- and two-arg versions | 10:25 | |
jnthn | I guess the other thing I worry a bit about is if some other opt goes and does a tree rewrite that changes the "input" arg to the guard, which would mean the input and output versions differ | 10:27 | |
uh, regsisters differ, even | |||
timotimo | ouch | ||
that would be bad, yeah | |||
jnthn | Maybe we should just swallow the cost of making them all have a w(obj) | ||
timotimo | if we jit the result most of the time, it's not such a big hit | 10:28 | |
jnthn | And in the interp honor the write | ||
And in the JIT, spot that it's a no-op during code-gen so not do it | |||
timotimo | another option that comes to mind is split BBs after every guard and insert PHI nodes, but that also sounds unclean and icky | ||
jnthn | It's also a post-split operation | ||
In that we insert guards having formed the CFG | |||
timotimo | hurm, so upping the versions is going to be "fun" | 10:29 | |
jnthn | Yeah, there's no nice option here | ||
But we really do want two versions | |||
timotimo | i agree | ||
jnthn | Otherwise we can't track when we have things that we already established vs. established from the guard | 10:30 | |
timotimo | aye. the "from guard" flag isn't terribly much help there either | ||
jnthn | That's at the heart of why we can't eliminate guards we prove aren't needed, but also why spesh plugin guard insertion has to be so reluctant to add facts: because they might be taken as having an effect on uses prior to the guard. | 10:31 | |
timotimo | yup | 10:32 | |
jnthn | Which is why ASSIGN-POS ends up with the horrific sequence of guards | 10:33 | |
10:33
Guest41438 joined
|
|||
timotimo | an optization pass based on walking the instructions backwards to see if something already established what a guard is guarding against would be another way; also not nice. | 10:33 | |
10:33
Guest41438 left
|
|||
jnthn | No, I'd rather handle it properly within the SSA form | 10:34 | |
timotimo | yes | ||
jnthn | That's why I'm leaning towards the extra write arg, despite it's obvious inefficiencies | ||
*its | |||
timotimo | at least it won't increase .moarvm size since it's only ever in post-spesh bytecode | 10:35 | |
jeez i could lie down for a nap already >_< | |||
yeah, maybe i will | 10:38 | ||
jnthn | Rest well :) | ||
10:38
lizmat left
|
|||
timotimo | thanks, good luck with the guard writing refactoring | 10:39 | |
surely it'll be hairier than i imagine already | |||
jnthn | Yeah, it's going to be tricky, though mostly at the "getting things straight during guard insertion" phase; everything after that should "just" fall out correctly | 10:40 | |
10:46
nandub joined
10:47
siso_ joined,
p6bannerbot sets mode: +v nandub,
siso_ left
10:48
nandub left
11:15
zakharyas left
11:30
brrt joined
11:31
p6bannerbot sets mode: +v brrt
|
|||
brrt | \o | 11:31 | |
i found the leakage of inline spesh graphs | |||
when we try to get a graph for a non-specialized frame, and we inline other frames during optimization, we leak the inlinee graphs | 11:33 | ||
11:36
pskosinski4 joined,
pskosinski4 left
11:42
tx14 joined,
tx14 left
11:44
wsm joined
11:45
wsm left
|
|||
jnthn | Aha! | 12:12 | |
good find | |||
brrt++ | |||
12:15
dan-17 joined
12:16
p6bannerbot sets mode: +v dan-17,
dan-17 left
12:31
brrt left
12:32
brrt joined
12:33
p6bannerbot sets mode: +v brrt
12:35
basic`10 joined,
p6bannerbot sets mode: +v basic`10
12:41
basic`10 left
12:42
brrt left
12:57
zakharyas joined
12:58
p6bannerbot sets mode: +v zakharyas
|
|||
Geth | MoarVM/reguard: 5bcae477c0 | (Jonathan Worthington)++ | 10 files Start splitting SSA versions at guards We have so far used a single SSA version to represent both pre-guard data and post-guard data. Initially, guards were only ever inserted after the read of a value, so this wasn't a big problem. However: * Now we insert extra guards during spesh plugin optimization and ... (16 more lines) |
13:03 | |
timotimo | do we just use number-of-versions++ for the post-guard version now? | 13:08 | |
jnthn | Actually for the pre-guard version in this particular case, 'cus it means we have less work to do :) | 13:09 | |
But yes, new version numbers are just "the next one" | 13:10 | ||
timotimo | ah | ||
jnthn | OK, now the hard part...I need to write a version splitting thingy | 13:11 | |
timotimo | for some reason i thought we'd have to take the next one from the pre-guard one and bump the versions in the rest of the graph | ||
jnthn | Those two would be semantically equivalent | ||
However, the first one is easier because at this guard insertion phase we didn't build the DU chain yet | |||
Well, and even if we had, it'd still be more work to go through them all and update | 13:12 | ||
Whereas here we just update the writer | |||
timotimo | right | 13:13 | |
jnthn | Ah, seems a version splitter ain't too bad to write. | 13:21 | |
timotimo | that's a relief | 13:23 | |
13:23
GodSkinS16 joined
|
|||
jnthn | ssa++ | 13:23 | |
Though I realize the splitting I'm doing is a form of SSI | |||
Kinda :) | |||
timotimo | hah, nice | 13:24 | |
i haven't actually finished reading that paper | |||
13:24
p6bannerbot sets mode: +v GodSkinS16
|
|||
timotimo | tbh i stopped before it got to any juicy bits | 13:24 | |
dogbert2 | timotimo: how was the nap? | 13:25 | |
timotimo | i feel the same, only later | ||
dogbert2 | i.e. tired ? | ||
timotimo | yup | 13:26 | |
dogbert2 | :( | ||
timotimo | but naps have a nontrivial chance of critical failure for me, which didn't happen | ||
so that's nice | |||
dogbert2 | critical failure doesn't sound good | 13:27 | |
timotimo | hah | ||
i just took the term from pen&paper role playing | |||
dogbert2 | aha | ||
ilmari | critical failure of nap sounds like something you don't wake up from | ||
dogbert2 | indeed | ||
13:28
GodSkinS16 left
|
|||
timotimo | it's not quite as serious in my case | 13:28 | |
diakopter | dirt nap comes to mind | 13:30 | |
dogbert2 | hmm, looks like one shouldn't run tests with MVM_SPESH_NODELAY=1 and MVM_SPESH_BLOCKING=1 atm | ||
timotimo | wow, that's a poetic way to say that | ||
dogbert2 | SEGV in cleanup_dead_bb_instructions (cleanup_facts=1, dead_bb=<optimized out>, g=0xb0844958, tc=<optimized out>) at src/spesh/dead_bb_elimination.c:32 | 13:32 | |
32 ann->next = move_to_ins->annotations; | |||
diakopter | impressive | 13:36 | |
timotimo | i don't quite understand why my nqp::while(1, nqp::stmts(...)) turns into an actual nested block (i.e. closure-taking) and Seq's from-loop and all that | 13:38 | |
jnthn | Well, thre's a draft split_version | 13:47 | |
13:54
brrt joined,
robertle left
13:55
p6bannerbot sets mode: +v brrt
14:00
dogbert17 left
14:06
eggy joined
14:07
p6bannerbot sets mode: +v eggy,
eggy left
14:14
xunplini13 joined
14:15
xunplini13 left
14:36
Thorne29 joined
14:37
p6bannerbot sets mode: +v Thorne29
14:38
Thorne29 left
14:39
preaction4 joined,
preaction4 left
14:42
sud08 joined
14:43
sud08 left
15:06
Monkeh29 joined,
Monkeh29 left
|
|||
Geth | MoarVM/reguard: b9ffe79ea9 | (Jonathan Worthington)++ | 4 files Implement SSA split; restore speculative args opt There were two ways to try and do this: rename everything looking back, or rename everything going forward. Going forward seems to be rather simpler to make work, especially since the tree going forward has not yet been optimized. So, that's done. Also if we do miss any renames, it's fairly harmless, because they would just miss the facts. (Note that the facts are not being added, for the reasons that triggered this work.) |
15:19 | |
jnthn | I did try going backwards first :) | ||
timotimo | hm, not even copying over the facts 1:1? | 15:24 | |
15:27
jelly29 joined,
jelly29 left
|
|||
jnthn | Will add that later | 15:28 | |
timotimo | OK. it's probably not so important given it'll have the proper facts soon after i guess? | ||
i'll try the lie down thing again perhaps :| | |||
15:35
lizmat joined
15:36
p6bannerbot sets mode: +v lizmat
|
|||
brrt | jnthn++ - the pace of progress scares me a bit | 15:41 | |
jnthn | All of spesh scares me a bit :P | ||
brrt | lol " MVM_VECTOR_DECL(MVMSpeshBB *, bbq);" | 15:42 | |
jnthn | Ah, the name lives from when I was doing the pred approach and it *was* a queue | 15:43 | |
(Wanted a BFS) | |||
First cut of re-instating spesh plugins seems to vaguely work | 15:46 | ||
Will need a little further effort to make it do something useful | |||
(That is, result in better code) | 15:47 | ||
brrt | :-) | 15:48 | |
jnthn | Today the weather is a bit cooler | 15:49 | |
Well, quite a lot cooler | |||
brrt | yes, it is much nicer | ||
much, much nicer | |||
jnthn | Yeah...figured I'd deal with this tricky task while it was nicer | ||
It'll finally let me bring to a conclusion something I started on over a month ago thinking it'd not be so hard :P | 15:50 | ||
Geth | MoarVM/fork-safety: 5 commits pushed by (Bart Wiegmans)++ | 15:54 | |
MoarVM/reguard: a7a2ca6f7d | (Jonathan Worthington)++ | 2 files Allow getting a new version of an in-use temp |
15:55 | ||
MoarVM/reguard: 6e7b215e24 | (Jonathan Worthington)++ | 2 files Update spesh plugin guard insertion With this, all of the guard insertion is now updated to use the new SSA versioned guards. |
|||
jnthn | uh-oh, somebody touchned ConcBlockingQueue :) | 15:56 | |
brrt++ | |||
15:57
zakharyas left
|
|||
brrt | :-) | 16:01 | |
16:06
ZofBot left,
ZofBot joined
|
|||
jnthn | Glad to say that the above is doing Rakudo/NQP builds and passing spectest with MVM_SPESH_BLOCKING=1 | 16:07 | |
16:07
p6bannerbot sets mode: +v ZofBot
|
|||
Geth | MoarVM/reguard: 004d2f3573 | (Jonathan Worthington)++ | src/spesh/manipulate.c Missing call to MVMVECTOR_INIT Can't be sure of zeroed memory on the C stack. |
16:12 | |
MoarVM/reguard: 431f33ef8f | (Jonathan Worthington)++ | src/spesh/plugin.c Update the test register in plugins So later guards and attribute access will happen with the earlier facts (although we aren't yet propagating facts fully enough for this to allow getattrs_o reduction in all cases). |
|||
16:20
diakopter left
|
|||
jnthn | And adding in the fact copying has some nice benchmark effects | 16:20 | |
And...causes a segfault in the NQP build :/ | 16:21 | ||
16:22
nurupo27 joined
16:23
p6bannerbot sets mode: +v nurupo27,
nurupo27 left
|
|||
jnthn | But...not under gdb :/ | 16:24 | |
(gdb) p facts->log_guard | 16:26 | ||
$1 = 4032350144 | |||
uummm... | |||
16:27
brrt left
16:41
lizmat left
|
|||
jnthn | Figured that out...spectesting by this point :) | 16:41 | |
16:41
bobe1 joined
16:42
lizmat joined,
bobe1 left,
p6bannerbot sets mode: +v lizmat,
diakopter joined,
p6bannerbot sets mode: +v diakopter
|
|||
Geth | MoarVM/reguard: 1a22aaa4c9 | (Jonathan Worthington)++ | 3 files Copy facts when splitting SSA versions This means that we accumulate new facts on top of what was already known. With this, we get better optimization of attribute fetches in spesh plugin guards and avoid some duplicate guard insertion, which helps various some benchmarks, especially in array and hash stores. |
16:45 | |
jnthn | A hash store benchmark that at the start of the week ran 4.4x slower than Perl 5 is now down to 1.9x slower (so running in 45% of the time that it used to take) | 16:48 | |
diakopter | wow | 17:00 | |
timotimo | beautiful results | 17:02 | |
i'm sure jnthn already has a clue for the next 50% :) :) | 17:04 | ||
jnthn | Hmm, just got the lowest spectest time I've seen in a while too | 17:05 | |
timotimo | \o/ | ||
jnthn | And was clean | ||
le merge | |||
Geth | MoarVM/master: 7 commits pushed by (Jonathan Worthington)++ | ||
timotimo | (o/ | ||
\o) | |||
jnthn | I was fearing this was going to be a multi-day headache, so am glad to have got it done in the day :) | ||
Dinner time; bbl | 17:10 | ||
17:47
travis-ci joined,
p6bannerbot sets mode: +v travis-ci
|
|||
travis-ci | MoarVM build errored. Jonathan Worthington 'Copy facts when splitting SSA versions | 17:47 | |
travis-ci.org/MoarVM/MoarVM/builds/414610362 github.com/MoarVM/MoarVM/compare/4...22aaa4c9c3 | |||
17:47
travis-ci left
17:49
lizmat left
|
|||
timotimo | jnthn: how do you feel about this addition to the spesh log? gist.github.com/timo/8b990f5089834...7cf7d93478 | 18:04 | |
i'm somehow having real difficulty printing out strings there, because i want to throw out any special characters (so the log format doesn't get disturbed) and limit it to a shorter length (so thhat ... yes) | 18:35 | ||
18:38
Maven_ joined,
Maven_ left
|
|||
jnthn | What's added in particualr? :) | 18:48 | |
Oh, the names of BOOTCode instances perhaps | |||
timotimo | that's right, name and - almost more importantly - the cuuid | 18:50 | |
jnthn | Yeah, I'm good with that change | 18:51 | |
So long as it copes fine with anon things with no nmae :) | |||
timotimo | i could also put name and cuuid into the stats output, whereever BOOTCode appears | 18:52 | |
oh, wait | |||
that's only "it's a BOOTCode, and it's concrete" | |||
not which value it is | |||
but the "static values" section could get it | 18:53 | ||
2 = Instance (BOOTStaticFrame) - '' (1448) | |||
this is what it looks like when the name is unset i believe. | |||
18:55
zakharyas joined
|
|||
jnthn | ok, that works :) | 18:56 | |
18:56
p6bannerbot sets mode: +v zakharyas
|
|||
timotimo | i'd also like to at some point introduce printing not only the cuuid but also the CU's name | 19:00 | |
since we tend to have multiple occurences of the same cuuid in the spesh log, and when they are both called '', it's annoying :) | 19:01 | ||
19:07
colomon joined,
p6bannerbot sets mode: +v colomon
19:38
Zimmedon13 joined,
Zimmedon13 left
19:52
CeBe7 joined,
lizmat joined,
CeBe7 left
19:53
p6bannerbot sets mode: +v lizmat
19:54
zakharyas left
20:29
pOe[ joined,
pOe[ left
20:35
dogbert17 joined
|
|||
timotimo | the generated code for nom-ws's check for spaces is kind of dreadful :D so many p6bools in there | 20:35 | |
20:35
p6bannerbot sets mode: +v dogbert17
|
|||
lizmat | yeah, p6bools are evil | 20:40 | |
timotimo | y'know, we could put True and False objects into the hll and have an hllbool op that lives in moarvm | 20:43 | |
then it'd be fine for spesh to know all about it | |||
a random thing i'm now interested in doing: teaching the jit how to devirtualize nativeref decont_[ins] | 20:44 | ||
at the moment a decont_i on a nativeref will first look up the ContainerSpec from the object's STable, checks if the type matches (i.e. int vs int), dispatches to the right fetch_i implementation - lexical, attribute, positional, or multidim, which then checks what kind of int (or whatever) it references (i.e. int8, int16, int32, or int64), and that finally pushes the result towards the register | 20:49 | ||
lizmat | wow | ||
timotimo | the jit currently just calls the exact same function that interp.c has, that's the one that starts by looking up the containerspec | 20:51 | |
hum. | 20:54 | ||
gotta find a suitable benchmark first | 20:55 | ||
21:08
lizmat_ joined
21:09
p6bannerbot sets mode: +v lizmat_
21:11
lizmat left
|
|||
timotimo | wow, this isn't the right benchmark for this, or it's just way too cheap | 21:15 | |
21:19
patrickz left
|
|||
timotimo | i've been running a moarvm with --optimize=0 | 21:30 | |
jnthn | That'll not be so speedy :) | 21:31 | |
MasterDuke | timotimo: which buttons did you say worked? (i got it running) | ||
timotimo | MasterDuke: once the profile is loaded, they all do, but if you refresh, you'll sometimes have to go to the routine overview and click "get routine overview" or something to make the call graph work | 21:35 | |
MasterDuke | ok | 21:36 | |
i thought the "load file" button was a file picker at first, but now it's working if i enter a file name | 21:37 | ||
how come some times are underlined? | 21:39 | ||
and man, i do love those github links to the file/line | 21:40 | ||
timotimo | the underlined ones are microsecond rather than milisecond | ||
i thought it'd be important for those to stand out so you don't confuse the two | |||
given the symbol is kind of similar at smaller font sizes | 21:41 | ||
(not all of us have retina displays | |||
) | |||
devirt is especially fast if you emit the devirted one and then the non-devirted one right after that | |||
MasterDuke | ok, makes sense | ||
no way to sort? | |||
timotimo | not yet ;( | 21:42 | |
i think we're losing some facts upon inlining | 21:48 | ||
there's a sequence that really should have the facts; getlexvia_o, guardconc, decont_i; the first two arguments to guardconc and the second argument to decont_i are versions 1 and 2 of that register and none of the versions have a single flag set on 'em | 21:50 | ||
the frame before inlining has the facts, and the devirt of decont_i also succeeds there, but after it gets inlined, no such luck | 21:53 | ||
do we rely on logging to give us facts about getlexvia_o and we're not looking for the facts in the inlined frame, or something? | |||
or should we "just" analyze sp_guard* ops in facts.c? | 21:54 | ||
jnthn: what do you think? | 21:56 | ||
jnthn | Yes, and note that the work that I did today makes that analysis a lot easier to do safely :) | 21:58 | |
Which is why it wasn't there yet :) | |||
timotimo | i interpret that as "go ahead and put all the guard ops into facts.c" :) | ||
jnthn | Or at least, why I didn't do it sooner | ||
Yes, you can do so :) | |||
timotimo | yey | ||
jnthn | It's super safe to do it now :) | 21:59 | |
github.com/MoarVM/MoarVM/issues/939 is a total brain screw...what on earth is going on with it... | 22:00 | ||
timotimo | maybe i can find out something using rr | ||
but maybe not before bedtime | |||
facts.c would probably be a nice relaxing time and i think i'm slowly getting a headache | |||
that issue is probably not very relaxing :) | 22:01 | ||
jnthn | I have one guess | ||
Which is that we have struct padding | |||
And the compiler issues a write for more memory than it really needs | |||
hah, wat, re-ordering the struct makes valgrind spew more :) | 22:02 | ||
timotimo | fun!! | ||
i like using pahole to see the exact structure of a struct that was compiled by the compiler | 22:03 | ||
jnthn | bah, memset of the region clears up the additional errors but not the original one :/ | 22:04 | |
timotimo | oh, hm, we might not want to be using lit_i16 for spesh slots, but lit_u16 at least | 22:11 | |
jnthn | Or even an sslot member of the union | 22:13 | |
timotimo | right | 22:14 | |
i'd prefer that, so i don't have to remember whether it was 16 or 32 :) | |||
Geth | MoarVM: 68b31976dd | (Jonathan Worthington)++ | src/core/ext.c Fix uninitialized memory in extops info Fixes #939. |
22:17 | |
timotimo | so it was basically harmless? | 22:18 | |
just accidentally more frames being considered deoptifiable than should have been? | |||
22:24
lizmat_ left
22:25
Kaiepi left
22:28
Kaiepi joined
22:29
p6bannerbot sets mode: +v Kaiepi
|
|||
timotimo | looks like i've done something wrong somewhere | 22:32 | |
when i have sp_guard_facts only invoked for sp_guardconc, and do copy_facts as well as set MVM_SPESH_FACT_CONCRETE in the flags, my short program ends with a huge stacktrace about an error in an END phaser | 22:33 | ||
Some exceptions were thrown in END blocks: | 22:34 | ||
No exception handler located for catch | |||
Geth | MoarVM: fba5c6b03a | (Jonathan Worthington)++ | src/spesh/dead_bb_elimination.c Harden BB deletion annotation motion Fixes #938. |
||
timotimo | even The Empty Program does that | ||
jnthn | Yeah, that sounds pretty wrong. | ||
Two dogbugs down | 22:35 | ||
timotimo | taking out the copy_facts makes it no longer do the crash | ||
i wonder, when would it be unsafe to just take the facts from the guard's source register and copy them over to the target register? the target register shouldn't have any facts on it, right? | 22:36 | ||
jnthn | Indeed, that sounds...odd | ||
Maybe some opt is taking place that ain't safe | |||
As a result of the added facts | |||
Though I dunno which | |||
timotimo | oh, now that's interesting | 22:37 | |
22:37
travis-ci joined,
p6bannerbot sets mode: +v travis-ci
|
|||
travis-ci | MoarVM build errored. Jonathan Worthington 'Fix uninitialized memory in extops info | 22:37 | |
travis-ci.org/MoarVM/MoarVM/builds/414719173 github.com/MoarVM/MoarVM/compare/1...b31976dd09 | |||
22:37
travis-ci left
|
|||
timotimo | m: say 0x10d.base(2) | 22:39 | |
camelia | 100001101 | ||
timotimo | that'd be known type, deconted, concrete, from_log_guard | ||
it's overwriting those flags - which are on the *target* register of the guard instruction, with either 0 or 4 in what i have, which is just deconted | 22:40 | ||
22:41
lizmat joined,
p6bannerbot sets mode: +v lizmat
|
|||
MasterDuke | timotimo: i just had a thought. i like the link to github for 'SETTING::' routines so much, what about the option to upload the script that the profile is for, so its routines can be linked to/shown? | 22:43 | |
timotimo | yes. | 22:45 | |
it'd ideally have an html editor with perl6 syntax highlighting features | |||
at least now all the decont_i are being devirtualized | 22:46 | ||
now i can measure one step of devirt, and then two steps of devirt | 22:47 | ||
oh, i should really use spesh_blocking | 22:50 | ||
22:55
travis-ci joined,
p6bannerbot sets mode: +v travis-ci
|
|||
travis-ci | MoarVM build errored. Jonathan Worthington 'Harden BB deletion annotation motion | 22:55 | |
travis-ci.org/MoarVM/MoarVM/builds/414723962 github.com/MoarVM/MoarVM/compare/6...a5c6b03a24 | |||
22:55
travis-ci left
|
|||
timotimo | m: say (5520020241 + 5520145571 + 5520033088) / (5660022473 + 5659967605 + 5659991722) | 23:02 | |
camelia | 0.9752777768 | ||
timotimo | that's one step of devirt | ||
Geth | MoarVM: 554fe425da | (Jonathan Worthington)++ | src/spesh/frame_walker.c Don't add base index when looking for lexical type This information is looked up against the static frame, while it's only the dynamic frame that is subject to the base_index due to the potential for inlining. Fixes a read past the end of the static frame lexical registry buffer. Also move `lexreg` back outside of the loop; it's not managed by the GC and so can't move. |
23:08 | |
jnthn | That'll do for today :) | 23:11 | |
timotimo | will have results soon for the two-level devirt | 23:17 | |
m: say (5200172438 + 5200307378 + 5200343000) / (5660022473 + 5659967605 + 5659991722) | 23:20 | ||
camelia | 0.91877735794 | ||
timotimo | that does sound like a Win Worth Having | ||
m: sub foo(int $a is rw) { for ^10_000_000 { $a = $a + 1 } }; my int $a = 1; foo($a) | 23:21 | ||
camelia | ( no output ) | ||
timotimo | this is the "benchmark" | ||
m: say 4.67 / 5.17 | 23:25 | ||
camelia | 0.903288 | ||
timotimo | the time spent mirrors the Ir count pretty closely | ||
jnthn | Pretty nice improvement | 23:28 | |
23:35
travis-ci joined,
p6bannerbot sets mode: +v travis-ci
|
|||
travis-ci | MoarVM build errored. Jonathan Worthington 'Don't add base index when looking for lexical type | 23:35 | |
travis-ci.org/MoarVM/MoarVM/builds/414731367 github.com/MoarVM/MoarVM/compare/f...4fe425da5a | |||
23:35
travis-ci left
23:59
d__b joined,
d__b left
|