github.com/moarvm/moarvm | IRC logs at colabti.org/irclogger/irclogger_logs/moarvm
Set by AlexDaniel on 12 June 2018.
01:08 lizmat left
Geth MoarVM: MasterDuke17++ created pull request #896:
Add parens to expressions to silence clang warning
01:39
MoarVM: MasterDuke17++ created pull request #897:
Add pragma to switch to silence clang warning
01:49
02:18 Kaiepi left 02:20 Kaiepi joined 05:08 Kaiepi left 05:09 Kaiepi joined 05:13 Kaiepi left, Kaiepi joined 05:25 brrt joined
brrt \o 05:30
05:50 stmuk joined 05:52 stmuk_ left 05:57 Kaiepi left 05:58 Kaiepi joined 06:23 kanopis joined, kanopis left 06:24 robertle_ left, kanopis joined 06:42 domidumont joined
Geth MoarVM: 513000322d | (Bart Wiegmans)++ | 2 files
Revert "Revert "Implement JIT template for ctxcallerskipthunks""

This reverts commit f66ebd4bdb45ee25cdda29d48a0c7eb7cd066d36.
Problem was in raw fragment with labels pointing out of the code.
06:48
06:48 domidumont left 06:49 domidumont joined 07:10 travis-ci joined
travis-ci MoarVM build errored. Bart Wiegmans 'Revert "Revert "Implement JIT template for ctxcallerskipthunks"" 07:10
travis-ci.org/MoarVM/MoarVM/builds/400755711 github.com/MoarVM/MoarVM/compare/4...3000322dc5
07:10 travis-ci left 07:12 brrt left 07:16 brrt joined 07:30 domidumont left, domidumont joined 08:12 zakharyas joined
brrt hmm, completely removing auto-casting may be impossible as we often rely on compile-time information of the sizes of operands 08:52
I know of a way to fix that but...
Geth MoarVM/jit-expr-refactor: 7 commits pushed by (Bart Wiegmans)++ 09:14
09:21 lizmat joined 09:23 brrt left 10:05 stmuk_ joined 10:07 stmuk left 10:48 brrt joined 10:55 zakharyas left 11:28 lizmat left 11:48 lizmat joined 12:23 zakharyas joined 12:24 Kaiepi left 12:29 Kaiepi joined 12:58 zakharyas left 12:59 brrt left, brrt joined 13:01 zakharyas joined 13:05 synopsebot_ left, synopsebot joined 13:10 lizmat left 13:17 brrt left 13:19 lizmat joined 13:22 domidumont left 13:24 domidumont joined
Geth MoarVM: 930fd477e6 | (Jonathan Worthington)++ | src/spesh/facts.c
More precise handling of reads of deopt-marked ins

Previously, we would consider reads by an instruction that might deopt post-optimization as if they were being read after that deoptimization, and so could preserve write instructions for the sake of deopt when there was no need to do so. With this change, we will not. This allows a small number of additional instruction deletions. For example, the ... (5 more lines)
13:42
jnthn It's something :) 13:43
yoleaux 13:03Z <Zoffix> jnthn: reminder that you're listed as a stakeholder for "start in sink attaches error handler" feature for 6.d: github.com/perl6/6.d-prep/blob/mas...or-handler
jnthn ooh, I still want to do that :)
I can also reproduce the NQP compile crash with JIT disabled 13:44
timotimo wow, small change to make that work 13:45
jnthn Next week I'll also 13:46
1. Separate out the "deopt usages" form the normal usages, so we can see the difference
2. Use that to let us be far more aggressive if we end up with no instructions at all that might deopt in the result 13:47
No SEGV without JIT in 24d3b5b. SEGV in 5ef61a7. 13:51
The one commit between them is a documentation patch.
Yeah, it's 5ef61a7. 13:52
No idea why, or how on earth it can magically work under the JIT 13:53
But obj is null. 13:54
In shift_o
timotimo how does it handle the case where MVM_spesh_args isn't being called by args_from_callinfo? 13:55
it just doesn't do optimizations?
jnthn Well, on the normal path we have the type tuple available and it sources the data from that 13:56
ah, world up time, bbl :) 13:57
*cup :)
timotimo ah!
i thought the world was going to end
and i was wondering how you'd manage to "be back"
14:00 robertle left 14:02 travis-ci joined
travis-ci MoarVM build failed. Jonathan Worthington 'More precise handling of reads of deopt-marked ins 14:02
travis-ci.org/MoarVM/MoarVM/builds/400891053 github.com/MoarVM/MoarVM/compare/5...0fd477e646
14:02 travis-ci left 14:14 brrt joined 14:36 lizmat left 14:44 lizmat joined 14:50 robertle joined
Geth MoarVM: ef41080c10 | (Bart Wiegmans)++ | 2 files
[JIT] Use '^addrf' macro for setf, getf

For consistency
14:54
brrt i'm a bit stuck on cast insertion
a): it works now, and it is useful (it allows you to write templates without much concern for the size of operands) 14:55
b): it requires a (partially redundant) walk of the tree directly after tree assembly 14:56
c): which prevents us from assigning sizes to nodes during the template precompilation phase
d): and makes it harder to correctly optimize the code (as you'll have to take into account operand sizes) 14:57
15:04 lizmat left 15:06 Kaiepi left 15:07 Kaiepi joined 15:12 travis-ci joined
travis-ci MoarVM build failed. Bart Wiegmans '[JIT] Use '^addrf' macro for setf, getf 15:12
travis-ci.org/MoarVM/MoarVM/builds/400921292 github.com/MoarVM/MoarVM/compare/9...41080c105f
15:12 travis-ci left 15:21 domidumont left 15:56 zakharyas left
Geth MoarVM/in-situ-strings: 6 commits pushed by (Timo Paulssen)++, (Bart Wiegmans)++ 16:14
brrt ^ rebase 16:30
16:30 brrt left 16:43 domidumont joined
dogbert17 .seen samcv 16:43
yoleaux I saw samcv 13:03Z in #perl6: <samcv> so there may not be a way to do that yet
dogbert17 looks as if the MoarVM build is broken on 32 bit systems atm 16:44
.tell samcv commit 3ef2acf0f breaks the build on 32 bit systems 16:54
yoleaux dogbert17: I'll pass your message to samcv.
dogbert17 .tell samcv take a look at gist.github.com/dogbert17/ab6953e0...cdf984bf60 16:57
yoleaux dogbert17: I'll pass your message to samcv.
Geth MoarVM: ugexe++ created pull request #898:
Remove unnecessary MVMROOT
17:08
17:15 domidumont left 18:32 Kaiepi left 18:35 Kaiepi joined 18:46 robertle left
samcv dogbert17: is there a way i can build 32 bit mvm on a 64 bit computer 19:13
yoleaux 16:54Z <dogbert17> samcv: commit 3ef2acf0f breaks the build on 32 bit systems
16:57Z <dogbert17> samcv: take a look at gist.github.com/dogbert17/ab6953e0...cdf984bf60
geekosaur would have to install a 32-bit toolchain in wow 19:16
Geth MoarVM: a3e38fd823 | (Samantha McVey)++ | src/strings/uthash.h
Fix the 32 bit build

It got broken with the newest hash changes due to an ommited #define line.
20:02
dogbert17 samcv++, that was quick :) 20:05
20:20 travis-ci joined
travis-ci MoarVM build failed. Samantha McVey 'Fix the 32 bit build 20:20
travis-ci.org/MoarVM/MoarVM/builds/401034468 github.com/MoarVM/MoarVM/compare/e...e38fd82338
20:20 travis-ci left 20:51 lizmat joined
samcv timotimo: i've been thinking about the robin hood hashing a lot today 21:38
timotimo have we discussed this before? i don't seem to remember 21:39
samcv and we would need to make changes to the implementation (compared to the "I made the fastest hash table" post. Since it suffers an issue if hashes get put into the same location, or near
when you reach the limit you expand the table, and that would run us out of memory during an attack. what i propose would be to have a slow path, which allows us to have variable length sections of the table 21:40
timotimo that was something distinct from the presentation that advocated linear scans over bucket lists?
samcv uh well similar
linear scans don't reorder anything while robin hood reorders things so they are as close as possible to where they are "supposed" to me 21:41
*be
though alternatively we could not have a slow path and just let things flow over on attack, though usually we will have max 4 or so items per position. and resize when there's no more room in the array near that position 21:42
21:43 MasterDuke left
timotimo what do you mean by "let things flow over"? 21:43
jnthn samcv: Does that approach results in read operations potentially becoming write operations? 21:44
samcv well go past where they should ideally be
timotimo ah, yes
jnthn I forget the exact idea, but have vague memories of robin hood hashing doing that
samcv and so we'd resize if it fills the section, and in normal course that is fine
jnthn: uh not sure
what you mean
but i would want poisoned sections to not impact performance of non-poisoned sections 21:45
timotimo if a read on the hash table can cause it to change internally, we can no longer say concurrent read access is safe
jnthn My vague recollection of robin hood hashing is that a lookup in the hash might move things
samcv so in a linked list that is not an issue, only 'poisoned' buckets will be slower
jnthn: only insertion
jnthn OK. So long as we don't make read operations into write operations, it's OK. 21:46
We must be able to safely read from a hash that's not being mutated from many threads.
I must have misremembered what robin hood hashing does, so false alarm :)
samcv but the issue with open addressing is: you can make a timing attack, and just try to keep hitting the same area
and that is not totally avoidable. but we just need to make sure that it doesn't slow down non-poisoned sections 21:47
jnthn: though slightly a side note: this script spends almost all its time in garbage collection gist.github.com/84266a6b5fc34af0eb...0f5fc24937 21:49
67%
jnthn o.O 21:50
21:50 MasterDuke joined
jnthn That's...more than a little unusual 21:50
timotimo is there a lot of red and orange in the profiler's gc tab?
jnthn oh, wait...a million element hash?
samcv yes but that's not the main issue
timotimo does it take long to iterate over a hash that's mostly empty? 21:51
samcv every addition to the hash causes an allocation
of a new string
jnthn Right, that's not surprising.
Since hashes have string keys, so it has to coerce
samcv but the script adds a million items, then deletes every 2nd item. then adds them back, deletes every 3rd item, adds it back etc
timotimo right, because they all stick around
they all stick around, so they all go in the old generation
that means the nursery won't actually shrink much from doing a gc run 21:52
jnthn Yeah, that can indeed be a problem
timotimo same problem when you make a list of a few million Int objects
jnthn The second problem is that the hash keeps pointing to new nursery entries
And so it has to be walked in full every single GC run
static.googleusercontent.com/media.../43823.pdf 21:53
timotimo yeah, that would help
we'd know to immediately be allocating in the gen2 and would barely run gc at all 21:54
jnthn Indeed 21:56
samcv anyway this is the burn down a.uguu.se/XAA2lr4GjZfD.png 21:58
or flame graph
timotimo i'd assume it gets a little confused by the jit 21:59
samcv though not sure why it's doing MVM_coerce_n_s
since it should be an int
jnthn I said that a moment ago. Hash keys are always strings.
samcv ah
wait what does that have to do with nums?
timotimo we tend to "smart_numify" everything everywhere 22:00
and that makes nums
jnthn That's a good question. Probably NQP's fondness for nums...which we probably want to kill off.
samcv though you'd see something similar with MVM_coerce_i_s afaik
timotimo i'd like it to be gone
i'd say run it again with MVM_JIT_DISABLE
jnthn Yes 22:01
Hmm, why is so much time in gc_free which in turn calls HASH_ITER_FIRST_ITEM? 22:02
samcv well it must be doing something with a hash iterator. and that's the only that shows up because most are macros 22:03
jnthn If it was gc_mark I'd understnad it
samcv i haven't pushed HASH_ITER_FIRST_ITEM as a static inline
jnthn Because the GC has to iterate the hash
To know what's in it
free does too to free it but I don't see where the hash is freed
Unless at program termination but then it'd not be under MVM_coerce_n_s 22:04
Oh, the stack trace looks odd in other ways too
timotimo i think it's only below coerce_n_s because the jit confuses stack frames
jnthn Yeah, think you're right
Geth MoarVM: 4373eecdc5 | (Jonathan Worthington)++ | 4 files
Store deopt usage separate from normal usage

So that we can understand which things are kept alive for deopt and which are being used for real. There's no behavior change from this, it's simply making it clearer to see what lives only for the sake of deopt in the spesh log. However, keeping this information separately will allow us to do some further opts in the future.
22:05
samcv well it looks pretty similar without jit
though you can test it yourself and maybe you'll notice more than me 22:06
jnthn Yeah, will have a look.
Something looks a bit off
As in, it feels like there's more going on that the things I know about
MasterDuke jnthn: you had some fix recently (related to inlining perhaps) that you said might be applicable to the profiler 22:07
samcv i mean i though the biggest issue with adding so many things to the hash would be having to FSA every hash entry and then freeing after removing. but it turned out differently 22:08
timotimo reading line annotation strings from the wrong compunit?
MasterDuke timotimo: that sounds plausible
samcv though it seems to create and destroy a crazy amount of hashes
since HASH_MAKE_TABLE is usually never visible 22:09
jnthn MasterDuke: Yes, timotimo would know if the profile also has that issue
timotimo i think that's not a problem as the instrumentation happens to the bytecode before spesh runs
so there won't have been inlines
samcv it's just when the hash expands since that happens many times for one hash, instead of once
jnthn afk for a bit
22:23 travis-ci joined
travis-ci MoarVM build failed. Jonathan Worthington 'Store deopt usage separate from normal usage 22:23
travis-ci.org/MoarVM/MoarVM/builds/401076856 github.com/MoarVM/MoarVM/compare/a...73eecdc556
22:24 travis-ci left 22:47 lizmat left