github.com/moarvm/moarvm | IRC logs at colabti.org/irclogger/irclogger_logs/moarvm Set by AlexDaniel on 12 June 2018. |
|||
01:22
sena_kun joined
01:23
Altai-man_ left
03:08
linkable6 left,
evalable6 left
03:10
evalable6 joined
03:11
linkable6 joined
03:21
Altai-man_ joined
03:23
sena_kun left
05:22
sena_kun joined
05:23
Altai-man_ left
07:21
Altai-man_ joined
07:23
sena_kun left
08:35
Geth_ joined,
Geth left
09:05
Voldenet joined,
Voldenet left,
Voldenet joined
09:22
sena_kun joined
09:24
Altai-man_ left
|
|||
nwc10 | good *, #moarvm | 09:27 | |
timotimo | heyo nwc10 | 10:46 | |
11:20
Kaiepi left
11:21
Altai-man_ joined
11:24
sena_kun left
11:25
Kaiepi joined
12:11
Kaiepi left
12:13
Kaiepi joined
12:21
brrt joined
|
|||
brrt | ohai #moarvm | 12:21 | |
Altai-man_ | Anyone around to explain me what can I use to catch why github.com/MoarVM/MoarVM/blob/mast...rp.c#L2529 fails in my very non-golfable code? | ||
brrt, o/ | |||
brrt | hi Altai-man_ | ||
I could tell you I'd like to take a look, but I'm fairly sure I wouldn't be able to help much | 12:22 | ||
Altai-man_ | I'd borrow help even from a cat hand. :) | 12:23 | |
brrt | show me the code pls | 12:24 | |
Altai-man_ | brrt, would you hesitate if it requires doing some clonning? | 12:25 | |
Because there are a lot of code in different repos, but the error is 100% reliable. :S | 12:26 | ||
the instructions are at github.com/rakudo/rakudo/issues/3579 | |||
brrt | Altai-man_: I'm sorry, that is likely to take more time than I have today | ||
Altai-man_ | brrt, then never mind me, sorry for taking it. | 12:27 | |
brrt | no problem at all :-) | ||
I mean, it's always okay to ask, and on another day I might be able to help you | |||
Altai-man_ | Golfed it down to only require cro and golfed file, github.com/rakudo/rakudo/issues/3579 | 12:38 | |
brrt | Altai-man_++ | 12:39 | |
Altai-man_ | m: use nqp; my $code = start { my $c := nqp::getcomp('Raku'); my $g := nqp::findmethod($c,'parsegrammar')($c); my $actions := nqp::findmethod($c,'parseactions')($c); $g.parse('', :p(0), :$actions); }; await $code; | 12:56 | |
camelia | An operation first awaited: in block <unit> at <tmp> line 1 Died with the exception: existskey requires a concrete object (got a NQPMu type object instead) in block at <tmp> line 1 |
||
Altai-man_ | m: use nqp; my $code = { my $c := nqp::getcomp('Raku'); my $g := nqp::findmethod($c,'parsegrammar')($c); my $actions := nqp::findmethod($c,'parseactions')($c); $g.parse('', :p(0), :$actions); }; say $code; | ||
camelia | -> ;; $_? is raw = OUTER::<$_> { #`(Block|68023728) ... } | ||
Altai-man_ | 210 characters golf without extra dependencies is what I got. \o/ | ||
brrt | that's not so bad | 12:57 | |
MasterDuke | Altai-man_++ | ||
Altai-man_ | But now I have no idea where to look next. | 12:58 | |
timotimo | i've made a whole trip through the stages of grief regarding vectorization in moarvm | 13:09 | |
13:22
sena_kun joined
|
|||
brrt | tell us timotimo | 13:23 | |
13:24
Altai-man_ left
|
|||
timotimo | well, i started with my old branch that introduced a vectorapply op that does simple things like elementwise add or multiply two integer or num arrays | 13:26 | |
next up, loop fusing was really important to me, so that we can @a >>+<< @b >>*>> 5 in one go instead of two | 13:27 | ||
but building a huge .c file with implementations of like sixty different formulas with type combinations of different-sized ints and nums would suck; it'd likely result in a humongous object file, and be much generating to do | 13:28 | ||
but dynasm can emit mmx and sse ops | |||
for that we'd need a tiny IR that nqp can toss at moarvm, which then compiles a piece of runnable code to apply to a bunch of VMArrays | 13:29 | ||
to build something completely new sounds like a really bad idea | |||
so i looked into orc, which i saw the last time i was on this topic, but didn't look any closer | |||
it has both a text-based asm-like input format of its own, as well as a set of C functions you can call to put a program in their IR together | 13:30 | ||
and then it generates the stuff at run-time if you want, or you use orcc to compile stuff ahead-of-time into .c files or whatever | |||
but i think that doesn't have an optimizer of its own | 13:31 | ||
so i looked into what llvm has in terms of vectorization stuff | |||
let's just say "it's a lot" | |||
so yeah | 13:32 | ||
i'll just do nothing instead | |||
the first step in this whole process is to pick apart and put together formulas that use many hypers, rather than immediately executing them | 13:33 | ||
and when we have that, we can just as well start by writing out loop-fused and perhaps even tiled nqp code | |||
so it doesn't have to go indirectly through, for example, self.infix and such, which may not be inlined | |||
13:38
brrt left
|
|||
Geth_ | MoarVM: MasterDuke17++ created pull request #1267: Let encode take a preallocated buffer |
13:41 | |
13:48
Altai-man_ joined
13:51
sena_kun left
|
|||
MasterDuke | timotimo: any idea how to further debug or fix that profiler problem? | 14:17 | |
nine | timotimo: reads like you've taken on a humongous task and made some decent progress on the initial research | 14:33 | |
timotimo flails helplessly | 14:43 | ||
15:03
colomon___ joined
15:05
colomon_ left
|
|||
MasterDuke | there are a whole ton of bind_key's when building rakudo, and the vast majority of them end up taking the slow path in alloc_from_global. any idea why that would be (i.e., why they would have failed to take from the free list)? | 15:27 | |
15:49
sena_kun joined
15:51
Altai-man_ left
|
|||
jnthn | MasterDuke: Empty free list? | 17:15 | |
A lot of the hashes will almost certainly live for a long time because they're part of the QAST tree | |||
sena_kun | jnthn, around for taking a peek at a bug or just chillin'? | 17:19 | |
jnthn | sena_kun: Mostly chilling. Hoping to receive dinner soon... :) | 17:31 | |
sena_kun | jnthn, enjoy it, nine++ provided a workaround for this bizarre ticket. :) | 17:32 | |
jnthn | Is it the existskey one? :) | ||
sena_kun | yeah | 17:33 | |
At least I've exercised in golfing and grepping rakudo sources. :) | 17:34 | ||
17:48
Altai-man_ joined
17:50
sena_kun left
|
|||
MasterDuke | jnthn: bind_key calls the fsa here github.com/MoarVM/MoarVM/blob/mast...ash.c#L103 and a large number of the calls end up here github.com/MoarVM/MoarVM/blob/mast...loc.c#L174 | 18:40 | |
19:01
patrickb joined
19:33
vrurg left,
vrurg_ joined
19:36
vrurg_ left
19:39
vrurg joined
19:49
sena_kun joined
19:50
Altai-man_ left
19:52
vrurg_ joined
19:53
vrurg left
19:57
colomon___ left
19:58
colomon joined
|
|||
nine | Oh, we have VALGRIND_MEMPOOL_ALLOC annotations in place already? Those can be used by heaptrack by just adding a #include <heaptrack_api.h> | 20:00 | |
20:03
patrickb left
|
|||
MasterDuke | just tried that, not sure what would/should be different about the output, seems pretty similar | 20:09 | |
timotimo | oh, really | 20:14 | |
MasterDuke | you know, it's not just most, but heaptrack is showing *all* calls from bind_key going through `alloc_slow_path` | ||
timotimo | did you also turn on valgrind support using Configure.pl? | ||
MasterDuke | --valgrind | ||
timotimo | also, it's possible that the defines for valgrind support trample the heaptrack api stuff | 20:15 | |
wait, those are only defines if valgrind support is off maybe? | |||
nine | Oh wait, there's #ifdef HEAPTRACK_DEFINE_VALGRIND_MACROS | ||
phabricator.kde.org/source/heaptra..._api.h$158 | |||
20:16
patrickb joined
|
|||
nine | So you also need to define that to get the heaptrack integration via valgrind macros | 20:16 | |
MasterDuke | hm, i added `#define HEAPTRACK_DEFINE_VALGRIND_MACROS; #include "heaptrack_api.h"` to src/core/fixedsizealloc.c, but it still doesn't seem to have changed much | 20:21 | |
oh wait | 20:22 | ||
before had 26.6m calls to allocation functions and 4.2m temp allocations. after had 43.9 calls to allocation functions and 3.5m temp allocations | 20:24 | ||
oh, and after has more entries in peak contributions, most memory allocations, etc | 20:26 | ||
so looks like it does help out some | |||
20:28
vrurg_ left
20:29
vrurg joined
|
|||
timotimo | pasting stuff into the godbolt compiler explorer is tricky when everything uses MVMObject and MVMThreadContext | 20:37 | |
MasterDuke | does it let you add any .h's? | 20:40 | |
timotimo | not sure if it allows me to add multiple files at once | 20:47 | |
MasterDuke | cat them all into one? | 20:49 | |
timotimo | uargh :) :) | 20:54 | |
anyway. no vector ops being used in this one loop i'm just looking at. huh. | 20:55 | ||
perhaps i'd have to put in a check that the addresses of the arrays are aligned sufficiently | 20:56 | ||
MasterDuke | just writing some "plain C" loops? or using liborc? | 20:57 | |
20:58
zakharyas joined
|
|||
timotimo | plain C | 21:01 | |
stolen from my vectorization branch | |||
i see the big checks for proper pointer alignment that chloekek (iirc) mentioned the other day | |||
oh, OK, i think i see what's wrong | |||
the pieces are so far apart in the assembly that i just didn't see it | 21:02 | ||
i don't see a way to go from a line in the assembler to a line in the editor or vice versa | |||
all i see is when you hover one it'll highlight on the other side, but only in the part you've scrolled to, not in the minimap | |||
d'oh | |||
right-click -> scroll to source is one way | |||
21:03
zakharyas left
21:41
patrickb left
21:48
Altai-man_ joined
21:50
sena_kun left
23:49
sena_kun joined
23:50
Altai-man_ left
|